【问题标题】:multiple where statement in Laravel 5Laravel 5中的多个where语句
【发布时间】:2018-07-11 10:26:37
【问题描述】:

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

我有如下查询语句:

    $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]);
                });

我怎样才能获得正确的结果?请帮忙。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案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]);
                      });
      

      【讨论】:

      • 删除 OR 的任何具体原因?删除 OR 条件将使其能够检查条件,即使该条件不在过滤器中
      • 对于那些中间(黑白或黑白)是强制性的。如果两个黑白都不是强制性的,那么使用orWhere。在答案中添加了相同的评论
      • 两者都不是伪命题
      • 然后使用orWhere 作为主要条件,也更新了我的答案
      • 如果您觉得有帮助,请接受作为结束问题的答案
      猜你喜欢
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 2017-06-10
      • 2020-09-28
      • 2018-09-05
      • 1970-01-01
      • 2016-02-02
      相关资源
      最近更新 更多