1

我需要查询如下:

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 之间的价格)执行

请建议

4

1 回答 1

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]);
    }
});
于 2013-11-12T23:30:06.017 回答