Eloquent で複合条件の抽出をする

Eloquent を実践的に使い始めたばかりなので初歩的なところですが、複合条件を組み立てるところについてメモ。

コード

やりたいこととしては、 WHERE A AND B AND (C OR D) という条件。

$departName = [
    '総務部',
    '営業部',
];
$dataRows = $dbConnect->table('hoge_db')
                      ->where(
                          [
                              ['user_id', '>', 23],
                              ['age', '<', 42],
                          ]
                      )
                      ->where(function($query) use ($departName) {
                          $query->orWhere('depart_name', '=', $departName[0])
                                ->orWhere('depart_name', '=', $departName[1]);
                      })
                      ->select(
                          'fuga_db.name',
                          'fuga_db.attribute',
                          'fuga_db.parameter'
                      )
                      ->join('fuga_db', 'hoge_db.user_id', '=', 'fuga_db.employee_id')
                      ->get();

$dbConnect にDB接続情報が入ったインスタンスがあるという前提ですが、イメージとしてこのようなコードです。

肝は以下。

  • OR 条件の括弧の中身を where()メソッド の中にクロージャとして無名関数で記述する。
  • 関数の引数はクエリ。そこに orWhere()メソッド を足していく。
  • クロージャの外部の変数はスコープの関係で Undefined Variable になってしまうので use句 でクロージャ内に持ち込む

これで意図した挙動になることを確認しました。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。