LaravelのEloquentを使ってANDと ORを使った複雑なSQLを表現する方法です。
SQLでのWHERE句で
WHERE col1= 'val1' AND (col2 = 'val2' OR col3 = 'val3')
をやってみます。Model::where('col1', 'val1')->where(function ($q) {
$q->where('col2', 'val2')
->orWhere('col3', 'val3');
});
whereメソッドにクロージャを渡しましょう。
コツはこれだけ。あとはwhereとorWhereメソッド繋げば( where a or b)を表現することができます。
クロージャが入ると少し複雑な気もしますが、冷静にコードを見たらわかるはず。
なんからのパラメータを使いたい場合はuseを使えばよいです。
Model::where('col1', 'val1')->where(function ($q) use ($a, $b) {
$q->where('col2', $a)
->orWhere('col3', $b);
});
わりと簡単ですよね。