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
句 でクロージャ内に持ち込む
これで意図した挙動になることを確認しました。