SQLで
SELECT * FROM xxx
where id = 1
AND (
type = 1
OR (type = 2 AND version = 1)
OR (type = 2 AND version = 2)
);
のようなSQLを書きたい時があったがカッコの部分でうまくいかなくて困ったことがあったので忘れないように残しておく
xxx::query()
->where('id', 1)
->where(function ($query) {
$query->where('type', 1);
$query->orWhere(function ($query_inner) {
$query_inner->orWhere('type', 2);
$query_inner->where('version', 1);
});
$query->orWhere(function ($query_inner2) {
$query_inner2->orWhere('type', 2);
$query_inner2->where('version', 2);
});
})->get();
このように書くことで想定のSQLになった。