たとえば、こんなwhere句
WHERE
`A` = 1 AND
(
(
`B` = 1 AND
`C` = 1
) OR
(
`D` = 1 AND
`E` = 1
)
)
クエリビルダで書くと
$members = Member::where('A', '=', 1)
->where(function($query){
$query->where(function($query){
$query->where('B', '=', 1)
->where('C', '=', 1);
})
->orWhere(function($query){
$query->where('D', '=', 1)
->where('E', '=', 1);
});
})
->get();
つまり、SQLでカッコで囲む('(‘ ~ ’)’)部分を、クロージャにすればOK。
面倒くさいけど、落ち着いてやれば難しいことではない。
変数を使いたい場合は、useで渡してやればOK。
$members = Member::where('A', '=', $a)
->where(function($query) use($b, $c, $d, $e){
$query->where(function($query) use($b, $c){
$query->where('B', '=', $b)
->where('C', '=', $c);
})
->orWhere(function($query) use($d, $e){
$query->where('D', '=', $d)
->where('E', '=', $e);
});
})
->get();
しかし、正直なところホント面倒くさい。。。
SQL書くより10倍時間がかかるし面倒くさい。。。
個人的にはクエリビルダなくなって欲しい。。。