Laravel 5.6或在哪里查询多个

时间:2018-10-20 05:56:22

标签: laravel

这是我的过滤器查询功能

 $keywords = [];
       foreach($columns as $key => $value){
         $keywords[] = [$key, 'LIKE', '%'.$value.'%'];
        }
        $query= $this->model ->orderBy('name', 'asc')->where('is_deleted', 0)->Where($keywords);

        if($status=="yes")
             $query= $query->where('status',1);

         $query= $query->get();
         return $query;

对于上述功能,我得到了以下查询

stores中选择*,其中is_deleted = 0且status = 1 AND(name像%r%和address像%r%)的顺序由name asc

但是我需要在类似查询中使用Or而不是ANd

select * from `stores` where `is_deleted` = 0 and `status` = 1 AND (`name` LIKE %r% or `address` LIKE %r%) order by `name` asc

请告知我需要在哪里更改?

2 个答案:

答案 0 :(得分:0)

您必须将这些orWhere()查询分组在一个where()子句中

$query = $this->model->where([
    ['is_deleted' => 0],
    ['status' => $status]
])
->where(function ($query) use($columns) {

    foreach($columns as $key => $value) {
        $query->orWehre($key, 'like', "%$value%");
    }
})
->orderBy('name');

答案 1 :(得分:0)

您可以使用Where和orWhere。

$query= $this->model->orderBy('name', 'asc')->where('is_deleted', 0)->
        orWhere($key, 'LIKE', '%'.$value.'%');