laravel/hyperf 对列表页面查询搜索进行封装

列表页面有很多查询,这里进行封装

<?php


namespace App\Utils;

use Hyperf\Database\Model\Builder;
use Hyperf\Utils\Collection;

class WhereBuildUtils
{
    public const OPERATOR = [
        '=',
        '<',
        '>',
        '<=',
        '>=',
        '<>',
        '!=',
        '<=>',
        'like',
        'like binary',
        'not like',
        'ilike',
        '&',
        '|',
        '^',
        '<<',
        '>>',
        'rlike',
        'regexp',
        'not regexp',
        '~',
        '~*',
        '!~',
        '!~*',
        'similar to',
        'not similar to',
        'not ilike',
        '~~*',
        '!~~*',
    ];

    /**
     * @param $builder
     * @param array $array
     * @return mixed|Collection|Builder
     */
    public static function bind($builder, Array $array)
    {
        /**@var Builder $builder */
        if ($array) {
            foreach ($array as $key => $item) {
                switch (gettype($item)) {
                    case 'integer':
                    case 'string':
                    case 'double':
                    case 'float':
                    case 'boolean':
                        if ($item) {
                            $builder = $builder->where($key, $item);
                        }
                        break;
                    case 'array':
                        $value = $item[0] ?? '';
                        $operator = $item[1] ?? null;
                        $column = $item[2] ?? $key;
                        if ($value) {
                            if (in_array($operator, self::OPERATOR, false)) {
                                $builder = $builder->where($column, $operator, $value);
                                break;
                            }
                            if (in_array($operator, ['in', 'IN'])) {
                                $builder = $builder->whereIn($column, $value);
                                break;
                            }
                            if (in_array($operator, ['not in', 'NOT IN'])) {
                                $builder = $builder->whereNotIn($column, $value);
                                break;
                            }

                            if (in_array($operator,['BETWEEN','between'])) {
                                $builder = $builder->whereBetween($column,$value);
                                break;
                            }
                        }
                        break;
                }
            }
        }
        return $builder;
    }
}

运用:

WhereBuildUtils::bind(Model::query(),['status' => $request->input('status'),
'store' => [$request->input('store',[]),'in'],
])

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值