特定の条件のみクエリ付け足したい
クエリビルダで、リクエストに特定の値が含まれてるときに、
where文などのクエリを付け足したい。
逆に、特定の値がないときにはwhere文を付け足したくない
if(isset($request['start_at'])) { $query = $query->where('start_at', '>', ($request['start_at'])); }
こんなの書きたくなる。
なんかif文増えて見栄え良くないなって。
when
->when(isset($request['start_at']), function($query) use ($request) { return $query->where('start_at', '>', ($request['start_at'])); })
第一引数がtrueのときだけ、あとの無名関数が実行される。
参考
ドキュメント
https://readouble.com/laravel/5.7/ja/queries.html
Laravelの元コード
https://github.com/illuminate/support/blob/6.0/Traits/EnumeratesValues.php#L410