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. mysql一時テーブルは、それを作成するスクリプトにアクセスする各ユーザーに固有です...?

    2. MySQLテーブルへの単純なリストの挿入(php)

    3. 最新のMicrosoftAccess機能に興味がありますか?

    4. エラー1118(42000)行サイズが大きすぎます