这是我的过滤器查询功能
$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
请告知我需要在哪里更改?
答案 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.'%');