sql >> Database >  >> RDS >> Mysql

Waar niet bestaat en Laravel

Je kunt je zoekopdracht ook herschrijven als left join zoals

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

In de querybuilder kun je het schrijven als

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();

Een andere benadering die ik u aanraad, is het opzetten van uw relaties en modellen en dit op een welsprekende manier te doen

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');
    }
}

En dan kun je Relationele afwezigheid opvragen gebruiken

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



  1. Celery Worker Database Connection Pooling

  2. Laravel bezoekersteller

  3. CASE .. WHEN-expressie in Oracle SQL

  4. MySQL gebruikt geen indexen (Gebruik van bestandssort) bij gebruik van ORDER BY