Laravel使用scope创建自定义where

版权声明:本文为博主原创文章,未经博主允许不得转载。 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里,然后

  1. User::multiWhere($where)->get();

或者

  1. $query = DB::table('user');
  2. $this->buildWhere($query, $where);
  3. $query->get();

是不是方便多了,不用写那么多的->where()了

猜你喜欢

转载自blog.csdn.net/hjh15827475896/article/details/82852670