【Laravel】Builderクラスのwhenの使い方
こんにちは。
ニシザワです。
本日は、Laravelの便利なBuilderクラスのwhenについて使い方を説明したいと思います。
when使ってますか??
検索で以下の様なコード作ったことあるかと思います。
こちらは会員検索で名前の条件がある場合のみ、クエリに追加する方法です。
if文書くの面倒ですよね。
そこでwhenを使います。
上記のコードは以下の様に書くことができます。
第一引数は検索対象の入力値を入れます。
第二引数はcallbaleになります。
callbaleの第一引数がBuilderクラス,第二引数がwhenの第一引数の値になります。
callbaleはwhenの第一引数がfalsyの場合はcallableの中の処理は実行されません。
ちなみに、whenの第三引数はdefaultを入れられるので、
whenの第一引数がfalse判定された場合は、defaultを使ってフォールバックすることもできます。
非常に便利なBuilderメソッドですので活用してみてください!
ニシザワです。
本日は、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メソッドですので活用してみてください!