エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【Laravel】クエリビルダでif文使うように条件付け足すwhen関数【696日目】

特定の条件のみクエリ付け足したい

クエリビルダで、リクエストに特定の値が含まれてるときに、
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