when()メソッドを使う
例えば下記のように、if文を使ってクエリを書くコードがある。
sample.php
$query = User::query();
if(request('filter') == 'likes') {
$query->where('likes', '>' , request('likes_amount', 0));
}
上記コードを、when()methodを使って、より見やすく、”Laravel Way”で書く。
when()メソッドの第一引数がtrueの場合実行される。
when_sample.php
$query = User::query();
$query->when($request('filter') == 'likes', function($q){
return $q->where('likes', '>', request('likes_amount', 0));
});
$users = $query->get();
###その他例
Query Builderでも使える。
sample1.php
$users = DB::table('users')
->when($request->input('role'), function($q) use($role) {
//イコールの場合、'='は省略可能
return $q->where('role', $role)
})->get();
参考
https://laravel.com/docs/8.x/queries#conditional-clauses
https://laraveldaily.com/less-know-way-conditional-queries/