Laravel

Laravelで複雑な条件検索、A and (B or C)を取得する方法

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。

⇨ Laravel 記事の目次はこちら

Laravel で複雑な条件検索、A and (B or C)を取得する方法についてまとめました。

さいしょに

Laravel では、where や、orWhere を使うことによって条件検索を実装することが可能ですが、

今回の記事では、

A かつ (B または C)のユーザーを取得する方法について書いていきます。

具体的には、

A:メール認証している
B:カテゴリー1に属している
C:カテゴリー5に属している

このユーザーの取得をしていこうと思います。

「メール認証していて」

「カテゴリー1か5」

のユーザーを取得するということです。

事前に知っておきたい内容

Laravel で where 複数で AND 検索をする方法

Laravel で orWhere を使って OR 検索をする方法

結論

コントローラー

$users = User::whereNotNull('email_verified_at')
    ->where(function($query){
        $query->where('category_id',1)
            ->orWhere('category_id',5);
    })
    ->get();

解説

メール認証しているユーザーだけ取得する where 条件を書く

->whereNotNull('email_verified_at')

カテゴリー1またはカテゴリー5の where 条件を書く

->where(function($query){
    $query->where('category_id',1)
        ->orWhere('category_id',5);
})

この部分について掘り下げます。

すこし複雑に見えるかもしれませんが、

A and (B or C)なので、

A と(B or C)をつなぐ部分は where になる

//この部分のこと
->where(function($query){

$query って何?

queryfunction内で使う引数なので、queryはfunction内で使う引数なので、q でも良いですが、function 内で検索条件の内容を引き継いでいるような感覚で良いと思います。

function 内で、(B or C)を書く

$query->where('category_id',1)
        ->orWhere('category_id',5);

まとめ

以上、Laravel で複雑な条件検索についてやってみました。

これらを複数書いていくと、様々な条件検索(チェックボックスで複数を選択できるような)が可能です。

とはいえ、whereIn のように複数条件を配列で指定する方法もありますので、同じカラムであれば whereIn で実装できないか?の検討もしてみてください。

誰かの参考になればと思います。

感想・苦情は TwitterDM にご連絡ください。

それでは!

関連記事

Laravel で where 複数で AND 検索をする方法

人気記事

PHP7.4 + Laravel6 のプロジェクトを AWS EC2 にデプロイする

【laravel-breadcrumbs】Laravel でパンくずリストを実装する