Edited at

Laravel5で「.. or ...) and (..」みたいな複雑な条件を書く

More than 3 years have passed since last update.


SELECT * FROM tbl_data WHERE (column_a = 'hoge' or column_a= 'piyo')
AND (column_b= 'foo' or column_b= 'bar');

こういうSQLを書きたい場合、->whereや->orWhereでどうすれば良いか。


$query = TblDatum::where(function($query){
$query->orWhere('column_a', '=', 'hoge')
->orWhere('column_a', '=', 'piyo');
})->where(function($query){
$query->orWhere('column_b', '=', 'foo')
->orWhere('column_b', '=', 'bar');
});

こうなりました。

'='は省略してもいいです。

変数使うときはuseを使います。

$query =  TblDatum::where(function($query) use ($hoge, $piyo) {

$query->orWhere('column_a', '=', $hoge)
->orWhere('column_a', '=', $piyo);
})->where(function($query) use ($foo, $bar) {
$query->orWhere('column_b', '=', $foo)
->orWhere('column_b', '=', $bar);
});