我需要查询如下:
SELECT * FROM table WHERE (field1 = "value" OR field2 = "value" OR filed3 = "value") AND ( price between 1 and 100 OR price between 101 and 200)
$priceArray = array(
array(1,100),
array(101,200)
);
$query->where('title',"like", '%test%')
->orWhere('subtitle',"like", '%test%')
->orWhere('author',"like", '%test%');
$query->where(function($query) use ($priceArray) {
for ($i = 0; $i < count($priceArray); i++) {
if ($i == 0) {
$query->whereBetween('price', $priceArray[$i])
}
else {
$query->orWhereBetween('price',$priceArray[$i])
}
}
})
然而,这执行为(主要查询和价格在1-100之间)或在101-200之间进行 相反,它应该作为主要查询执行(价格在1-100或价格在101 -200之间)
请建议
答案 0 :(得分:1)
这应该有效:
$priceArray = array(
array( 1, 100),
array(101, 200)
);
$query->where(function($query) {
$query->where('title', 'like', '%test%')
->orWhere('subtitle', 'like', '%test%')
->orWhere('author', 'like', '%test%');
})->where(function($query) use ($priceArray) {
for ($i = 0; $i < count($priceArray); $i++) {
$query->orWhereBetween('price', $priceArray[$i]);
}
});