😀
"when"を用いて簡単に見やすい検索機能を実装しよう(Laravel )
今回はLaravelで検索機能を実装する方法を解説します。
普通にif文でリクエストがあるかどうかチェックして、whereで条件をつけるのでも全然問題ありませんが、実はLaravelのQuery Builderで値があればクエリを付与するという便利なメソッドがあるので,今回はそちらの紹介をしたいと思います。
users
テーブルがあると仮定して、「ユーザー名の部分一致検索」、「部署ID検索」の2つを実装してみましょう!
先に完成形を確認する
public function index(Request $request)
{
$name = $request->input("name");
$departmentId = $request->input("departmentId");
$query = User::query();
// 名前で検索する
$query->when($name, function($query, $name) {
return $query->where('name', "LIKE", "%$name%");
});
// 部署IDで検索する
$query->when($departmentId, function($query, $departmentId) {
return $query->where("department_id", $departmentId);
});
return $query->get();
}
when
メソッドとは?
whenメソッドは第2引数にクエリを発行するコールバック関数を書き、第1引数には第2引数のコールバック関数を実行するかどうかを指定します。
つまり、第一引数がtrueであれば、第2引数でクエリを発行しますよっていうメソッドです。
上記で先に見せているようにこのように使うことができます。
この場合は変数nameが存在すれば、nameでLIKE検索をかけます。
$query->when($name, function($query, $name) {
return $query->where('name', "LIKE", "%$name%");
});
普通にifを使う場合だとこうなります。
if ($name) {
$query->where('name', "LIKE", "%$name%");
}
どっちも同じことなので、こういう方法もありますよということを頭の片隅において、好きな方を使っていただければと思います!
おわりに
今回は QueryBuilderのwhenメソッドの紹介をしました。
検索機能を作る場面は結構あると思うので、ぜひこの機会に使ってみてくださいね。
では、また!
Discussion