Mysql
 sql >> база данни >  >> RDS >> Mysql

Където не съществува в Laravel

Можете също да пренапишете заявката си като ляво присъединяване като

SELECT i.*
FROM item i
LEFT JOIN qualifications q ON q.item_id = i.id  AND q.user_id = 2
WHERE q.item_id IS NULL

В конструктора на заявки можете да го напишете като

DB::table('item as i')
    ->select('i.*')
    ->leftJoin('qualifications as q', function ($join) use($user_id) {
        $join->on('q.item_id', '=', 'i.id')
             ->on('q.user_id', '=', $user_id);
    })
    ->whereNull('q.item_id')
    ->get();

Друг подход, който ви предлагам да използвате, е да настроите отношенията и моделите си и да го направите по красноречив начин

class Item extends Model
{
    public function qualifications()
    {
        return $this->hasMany(\App\Models\Qualification::class, 'item_id');
    }
}

class Qualification extends Model
{
    public function qualifications()
    {
        return $this->belongsTo(Item::class, 'item_id');
    }
}

И след това можете да използвате Отсъствие на връзка при запитване

Item::whereDoesntHave('qualifications', function ($query) use($user_id) {
    $query->where('user_id', '=', $user_id);
})->get();



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. грешка при автоматично увеличаване на mysql

  2. Проблем с външния ключ при миграция на Laravel

  3. flush tables - достъпът е отказан

  4. HTML плъзгач за формуляр

  5. mysql автоматично съхранява времева марка за създаване на запис