2024/03/06にリリースされたLaravel 10.47から、新しいクエリビルダーとして whereAll()
と whereAny()
メソッドが追加されました。
使い方
1つの値を複数のカラムと比較する検索のロジック等を作成する場合があります。
例えば、名、姓、電子メール、電話番号でユーザーを検索する場合は、これまで以下のような書き方をしていました。
Controller
User::query()
->where(function ($query) use ($search) {
$query
->where('first_name', 'LIKE', "%$search%")
->orWhere('last_name', 'LIKE', "%$search%")
->orWhere('email', 'LIKE', "%$search%")
->orWhere('phone', 'LIKE', "%$search%");
});
これだと大量のorWhere
を書かなければなりませんし、useを使ってクロージャへ変数を渡してやる必要もあり、少々分かりにくい印象でした。
Laravel 10.47 からは以下のように書くことができます。
Controller
User::whereAny(
[
'first_name',
'last_name',
'email',
'phone'
],
'LIKE',
"%$search%"
);
冗長なコードが無くなり、クロージャも不要になってスッキリした書き方になりました。
また、AND条件にしたい場合はwhereAll()
を使うことができます。
Controller
User::whereAll([
'first_name',
'last_name',
'email',
], 'LIKE', "%$search%");
参考情報
最後に
次のメジャーバージョンであるLaravel 11 は2024年3月12日にリリース予定で、おそらく10.47は10.xブランチへの最後のリリースになるようです。Laravel 10 は引き続き2024年8月6日までバグ修正を受け取り、セキュリティ修正は2025年2月4日まで受け取るとの事です。