model基类封装自定义方法whereFilter

model基类中封装whereFilter方法

   /**
     * whereFilter
     * @param $query
     * @param array $column
     */
    public function scopeWhereFilter($query, array $column, string $boolean = 'and')
    {
        if ($boolean !== 'and' && $boolean !== 'or' && !is_numeric(key($column))) {
            throw new \InvalidArgumentException('query params error', 55555);
        }

        $firstValue = current($column);

        if ($firstValue !== 'and' && $firstValue !== 'or') {
            if (count($column) !== 3) {
                throw new \InvalidArgumentException('query params error', 55556);
            }

            [$field, $operator, $value] = $column;

            if (!is_string($field) || empty($value)) {
                return $query;
            }

            if ($operator === 'in') {
                return $query->whereIn($field, $value, $boolean);
            }

            if ($operator === 'like') {
                $query->where($field, $operator, '%' . $value . '%', $boolean);
            } else {
                $query->where($field, $operator, $value, $boolean);
            }
        }
        unset($column[0]);

        return $query->where(function ($query) use ($firstValue, $column) {
            foreach ($column as $item) {
                if (is_array($item)) {
                    $this->scopeWhereFilter($query, $item, $firstValue);
                }
            }
        }, null, null, $boolean);
    }

在业务中调用示例

$query = DealerModel::query()
    ->whereFilter([
        'and',
        ['dealer_id', '=', 1],
        ['dealer_name', 'like', "aaaaa"],
        [
            'or',
            ['dealer_name', 'like', 'aaaqa'],
            ['dealer_id', 'in', [1, 3]],
            ['dealer_id', 'in', []],
            ['dealer_name', '=', ''],
        ]
    ]);

此方法是为了过滤查询中为空的值的条件,把所有条件按照逻辑全部书写在条件中,方便阅读代码理解逻辑同时方便维护,这个只是简单封装,比较简陋,给大家提供一下思路,有问题大家可以一块交流一下

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!