Breathnote
Laravelのクエリビルダ用メソッド(where・orWhere)を用いて、論理演算の優先度を調整する

Laravelのクエリビルダ用メソッド(where・orWhere)を用いて、論理演算の優先度を調整する

Laravelのクエリビルダにおいて、検索条件の指定に利用できるwhereとorWhere。これらを連結して複数条件を組み立てる場合、論理演算の優先度に気を付ける必要があります。特に、orWhereを挟む場合は、クロージャによる優先度の調整が必要になる場合があります。

今回は、複数条件の記法としてよく使うものを紹介します。

記法一覧

① A and B or C

A and B or C
Model::where('a', $a)->where('b', $b)->orWhere('c', $c);

② A and (B or C)

A and (B or C)
Model::where('a', $a)->where(function ($query) use ($b, $c) {
    $query->where('b', $b)->orWhere('c', $c);
});

③ (A or B) and C

C and (A or B)として②の形で書いてもOK。

(A or B) and C
Model::where(function ($query) use ($a, $b) {
    $query->where('a', $a)->orWhere('b', $b);
})->where('c', $c);

④ A or B and C

B and C or Aとして①の形で書いてもOK。

A or B and C
Model::where('a', $a)->orWhere(function ($query) use ($b, $c) {
    $query->where('b', $b)->where('c', $c);
});

所感

検索対象が同じカラムであれば、whereInとか使えるんですけどね…。