版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hjh15827475896/article/details/82852670
/**
* 多条件搜索
*
* @param $query
* @param array $where 查询条件
* @return mixed
*/
public function scopeMultiWhere($query, array $where)
{
return $this->buildWhere($query, $where);
}
/**
* 构造查询条件SQL语句
*
* 查询条件示例:
* $where['field'] = $value;
* $where['field'] = ['>=', $value1];
* $where['field'] = [['>=', $value1], ['<=', $value2]];
*
* @param $query
* @param mixed $where 查询条件
* @return mixed
*/
public function buildWhere($query, $where)
{
if (!is_array($where)) {
return $query;
}
foreach ($where as $field => $val) {
if ($field && ($val || $val === 0)) {
if (!is_array($val)) {
$query->where($field, $val);
} else {
if (is_array($val[0])) {
$query->where(function($query) use ($field, $val) {
foreach ($val as $v) {
if (!isset($v[1])) {
$query->orWhere($field, '=', $v[0]);
} else {
$query->orWhere($field, $v[0], $v[1]);
}
}
});
} else {
switch ($val[0]) {
case 'between':
$query->whereBetween($field, $val[1]);
break;
case 'in':
$query->whereIn($field, $val[1]);
break;
case 'notIn':
$query->whereNotIn($field, $val[1]);
break;
case 'null':
$query->whereNull($field);
break;
case 'raw':
$query->whereRaw(str_replace('__field__',$field,$val[1]));
break;
default:
$query->where($field, $val[0], $val[1]);
}
}
}
}
}
return $query;
}
使用方法:
把上面的代码放到基Model里,然后
- User::multiWhere($where)->get();
或者
- $query = DB::table('user');
- $this->buildWhere($query, $where);
- $query->get();
是不是方便多了,不用写那么多的->where()了