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
とか使えるんですけどね…。