👌

Laravelクエリビルダのwhenメソッドの使い方

2025/02/20に公開

Laravel Framework 8.43.0 にて検証

コードは下記から引用
https://readouble.com/laravel/8.x/ja/queries.html

whenメソッドの説明を見るとこのような使い方となっている

$users = DB::table('users')
                ->when($role, function ($query, $role) {
                    return $query->where('role_id', $role);
                })
                ->get();

// true/falseで処理を分けるパターン
$users = DB::table('users')
                ->when($sortByVotes, function ($query, $sortByVotes) {
                    return $query->orderBy('votes');
                }, function ($query) {
                    return $query->orderBy('name');
                })
                ->get();

今回はtrueのみwhereステートメントを適用したかったので省略記法調べたところ
このようにも記載できることがわかった

$users = DB::table('users')
            ->when($role, fn($query) => $query->where('role_id', $role))
            ->get();

ちなみにこれはダメらしい

$users = DB::table('users') ->when($role, $query->where('role_id', $role) ->get();

Discussion