Laravel 5中的多个where语句

时间:2018-02-01 06:54:17

标签: php laravel-5 eloquent laravel-5.4 laravel-query-builder

我正在尝试通过laravel 5.4中的ajax实现过滤器搜索结果目前我遇到了whereBetween与其他where语句结合时的问题。

我有一个查询语句如下:

    $query   = $this->hotel->query();
    $query   = $query->where(function ($query){
                    $query->orWhereBetween('min_price' , [500 , 1000]);
                    $query->orWhereBetween('min_price' , [5000 , 50000]);
                });
    $query   = $query->whereIn('internet', [1,2]);
    $query   = $query->whereIn('breakfast', [1,2]);
    $query   = $query->where('language', 'LIKE', '%'.'english'.'%');

    $hotel = $query->get();
    foreach($hotel as $h) {
        echo $h->id.'<br>';
    } exit();

上述查询未列出500 to 1005000 to 50000之间的价格结果。有两行符合上述条件,但只返回单行。

数据库数据

id    min_price    internet    breakfast    language
4     876          2           2            english
5     40000        1           2            english 

结果: 上面的查询结果只有id 4,但应该返回id 4和5。

我想我在网上遗漏了一些东西

$query   = $query->where(function ($query){
                    $query->orWhereBetween('min_price' , [500 , 1000]);
                    $query->orWhereBetween('min_price' , [5000 , 50000]);
                });

如何才能获得正确的结果?请帮忙。

2 个答案:

答案 0 :(得分:2)

不确定您的要求,但您可能需要安排您的条件,如

$query   = $query->orWhere(function ($q){ //assuming b/w is not mandatory
                    $q->whereBetween('min_price' , [500 , 1000]); // removed OR from here
                    $q->orWhereBetween('min_price' , [5000 , 50000]);
                });

答案 1 :(得分:1)

更改内部where子句变量名称。

$query   = $query->where(function ($q){
                    $q->WhereBetween('min_price' , [500 , 1000]);
                    $q->orWhereBetween('min_price' , [5000 , 50000]);
                });