【Laravel】クエリビルダを使って A and (B or C) で絞り込む

Laravel

共通の絞り込みがある上で、ケース別に絞り込みもしたいときがあると思います。

Laravelで、A and (B or C) の絞り込みをしたいときの書き方についての説明です。

以下は、Hogeテーブルのidカラムの中で、hugaカラムが1またはpiyoカラムが1であるレコードを取得したいケースです。
※Hogeテーブルから、 id = $id and (huga =1 or piyo =1) のように取り出したい、ということです。

$hoge = Hoge::where('id', $id)// 予めid変数を取得しておく
                        ->where(function($q){
                            $q->where('huga', '=', 1))
                              ->orWhere('piyo', '=', 1);
                        } )
                        ->get();

別の場所で$fooを定義しておく上で、useを使えば好きな変数で絞りこみもできます。

 ->where(function($q)use($foo){
        $q->where('huga', '=', $foo)
   })
    

リーダブルの記事はこちらとなります。

データベース:クエリビルダ 8.x Laravel

コメント

タイトルとURLをコピーしました