sql >> Databáze >  >> RDS >> Mysql

Kde neexistuje en Laravel

Svůj dotaz můžete také přepsat jako levé spojení jako

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

V nástroji pro tvorbu dotazů jej můžete napsat jako

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

Dalším přístupem, který vám doporučuji použít, je nastavit své vztahy a modely a udělat to výmluvným způsobem

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

A pak můžete použít Dotazování nepřítomnosti vztahu

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



  1. Načítání komentářů z PostgreSQL DB

  2. Jak InnoDB ukládá sloupce znaků?

  3. MySQL selže na:mysql ERROR 1524 (HY000):Plugin 'auth_socket' není načten

  4. Nelze použít znakovou sadu utf8mb4 s CloudSQL na AppEngine Python