開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. PHP >
  4. Laravel >
  5. 【Laravel】Builderクラスのwhenの使い方

【Laravel】Builderクラスのwhenの使い方

こんにちは。
ニシザワです。


本日は、Laravelの便利なBuilderクラスのwhenについて使い方を説明したいと思います。
when使ってますか??
検索で以下の様なコード作ったことあるかと思います。

    /**
     * @param SearchGet $request
     * @return JsonResponse
     */
    public function search(SearchGet $request): JsonResponse
    {
        $conditions = $request->validated();
        $query = Member::query();
        if ($name = Arr::get($conditions, 'name')) {
            $query->where('name', $name);
        }
        $members = $query->get();
        return response()->json($members->toArray());
    }

こちらは会員検索で名前の条件がある場合のみ、クエリに追加する方法です。
if文書くの面倒ですよね。
そこでwhenを使います。
上記のコードは以下の様に書くことができます。

    /**
     * @param SearchGet $request
     * @return JsonResponse
     */
    public function search(SearchGet $request): JsonResponse
    {
        $conditions = $request->validated();
        $members = Member::query()
            ->when(Arr::get($conditions, 'name'), function (Builder $query, string $name) {
                return $query->where('name', $name);
            })->get();
        return response()->json($members->toArray());
    }
whenの
第一引数は検索対象の入力値を入れます。
第二引数はcallbaleになります。
callbaleの第一引数がBuilderクラス,第二引数がwhenの第一引数の値になります。
callbaleはwhenの第一引数がfalsyの場合はcallableの中の処理は実行されません。
ちなみに、whenの第三引数はdefaultを入れられるので、
whenの第一引数がfalse判定された場合は、defaultを使ってフォールバックすることもできます。

非常に便利なBuilderメソッドですので活用してみてください!
TOPに戻る