Laravel创建自定义where
/** * 多条件搜索 * * @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()了。