【Laravel】Eloquentを使用して複数のWhere句の条件を1つにまとめて設定する方法

LaravelでDBから検索して値を取得するときにEloquentクエリビルダーを使用していて、複数の条件を設定したいときってありますよね。

Post::where('status', '=', 1)
  ->where('author_id', '=', 1)
  ->where('tag_id', '=', 1)
  ->get();

これでも動作はします。

でもあまりに長くwhereが連なっているとコードの可読性が落ちます。

そんなときはこうするといいです。

$cond = ['status' => 1, 'author_id' => 1, 'tag_id' => 1];

Post::where($cond)->get();

ちなみにこれは検索条件がすべてイコールの場合です。

それ以外、とか1以上、みたいなイコール以外の場合には設定する条件の連想配列を以下のようにします。

$cond = [['status', '<>', 1], ['author_id', '=', 1], ['tag_id', '>', 1]];

Post::where($cond)->get();

これでイコール以外にも柔軟に、可読性の高いコードになりますね。