针对hyperf框架改造----仓库基类增删改查的封装

<?php

declare(strict_types=1);
namespace AppRepositories;

use HyperfDatabaseModelModel;
use HyperfDiAnnotationInject;
use PsrContainerContainerInterface;

/**
 * 仓库基类
 * Class BaseRepository.
 */
class BaseRepository
{
    /**
     * @var string
     */
    public connection = 'default';

    /**
     * @var
     */
    publicmodel;

    /**
     * @Inject
     * @var ContainerInterface
     */
    protected container;

    /**
     * __get
     * 可以实现通过仓库类自定义隐式注入需要注入的服务类 暂时不用.
     * @paramkey
     * @return ContainerInterface|void
     */
    public function __get(key)
    {
        switch (key) {
            case 'app':
                return this->container;
                break;
            default:
                returnthis->container;
        }
    }

    /**
     * 不存在方法时的处理  适用于模型创建.
     * @param method
     * @paramparameters
     * @return mixed
     */
    public function __call(method,parameters)
    {
        return make(this->model)->setConnection(this->connection)->getModel(this->model)->{method}(...parameters);
    }

    /**
     * 自定义链接.
     * @param stringconnection
     * @return BaseRepository
     */
    public function setConnection(connection = 'default')
    {this->connection = connection;
        returnthis;
    }

    /**
     * 自定义模型.
     * @param model
     * @return BaseRepository
     */
    public function setModel(model)
    {
        this->model =model;
        return this;
    }

    /**
     * 获取详情.
     * @param array|string[]columnArr
     * @param array orderBy
     * @return null|array|HyperfDatabaseQueryBuilder|Model|object
     */
    public function getFirst(arrayfilter, array columnArr = ['*'],orderBy = [])
    {
        qb = make(this->model)->setConnection(this->connection)->query();qb = queryFilter(filter,qb)->select(columnArr);
        if (orderBy && ! empty(orderBy)) {
            foreach (orderBy as col =>direction) {
                qb =qb->orderBy(col,direction);
            }
        }
        data =qb->first();
        return data ?data->toArray() : [];
    }

    /**
     * 获取列表.
     * @return array
     */
    public function getList(array filter, arraycolumnArr = ['*'], int page = 1, intpageSize = -1, array orderBy = [])
    {qb = make(this->model)->setConnection(this->connection)->query();
        qb = queryFilter(filter, qb)->select(columnArr);
        if (orderBy && ! empty(orderBy)) {
            foreach (orderBy ascol => direction) {qb = qb->orderBy(col, direction);
            }
        }
        if (page > 0 && pageSize>0) {qb = qb->offset(((page - 1) * pageSize))->limit(pageSize);
        }
        return qb->get()->toArray();
    }

    /**
     * 获取带分页的列表.
     * @return array
     */
    public function lists(arrayfilter, array columnArr = ['*'], intpage = 1, int pageSize = -1, arrayorderBy = [])
    {
        qb = make(this->model)->setConnection(this->connection)->query();qb = queryFilter(filter,qb)->select(columnArr);
        if (orderBy && ! empty(orderBy)) {
            foreach (orderBy as col =>direction) {
                qb =qb->orderBy(col,direction);
            }
        }
        if (page>0 &&pageSize > 0) {
            qb =qb->offset(((page - 1) *pageSize))->limit(pageSize);
        }list = qb->paginate(pageSize, columnArr, '',page)
            ->toArray();
        return [
            'list' => list['data'],
            'total_count' =>list['total'],
        ];
    }

    /**
     * 获取列表--原生
     * @param array data
     * @return array|HyperfUtilsCollection
     */
    public function getListRaw(arrayfilter, string columns = '*', intpage = 1, int pageSize = -1, arrayorderBy = [], data = [])
    {qb = make(this->model)->setConnection(this->connection)->query();
        qb = queryFilter(filter, qb);
        if (page > 0 && pageSize>0) {qb->offset(((page - 1) *pageSize))->limit(pageSize);
        }

        if (orderBy && ! empty(orderBy)) {
            foreach (orderBy as col =>direction) {
                qb =qb->orderBy(col,direction);
            }
        }
        data =qb->selectRaw(columns,data)->get();
        return is_array(data) ?data : data->toArray();
    }

    /**
     * 获取单个值
     * @return null|mixed
     */
    public function getValue(arrayfilter, string column = '*', arrayorderBy = [])
    {
        qb = make(this->model)->setConnection(this->connection)->query();qb = queryFilter(filter,qb);
        if (orderBy && ! empty(orderBy)) {
            foreach (orderBy ascol => direction) {qb = qb->orderBy(col, direction);
            }
        }
        returnqb->value(column);
    }

    /**
     * 获取一列.
     * @return HyperfUtilsCollection
     */
    public function getPluck(arrayfilter = [], string columns = '*', intpage = 1, int pageSize = -1, arrayorderBy = [])
    {
        qb = make(this->model)->setConnection(this->connection)->query();qb = queryFilter(filter,qb);
        if (page>0 &&pageSize > 0) {
            qb->offset(((page - 1) * pageSize))->limit(pageSize);
        }
        if (orderBy && ! empty(orderBy)) {
            foreach (orderBy ascol => direction) {qb = qb->orderBy(col, direction);
            }
        }
        returnqb->pluck(columns);
    }

    /**
     * 统计数量.
     * @return int
     */
    public function count(arrayfilter)
    {
        qb = make(this->model)->setConnection(this->connection)->query();qb = queryFilter(filter,qb);
        return qb->count();
    }

    /**
     * 计算.
     * @return int
     */
    public function sum(arrayfilter, string column)
    {qb = make(this->model)->setConnection(this->connection)->query();
        qb = queryFilter(filter, qb);
        returnqb->sum(column);
    }

    /**
     * 新增数据 不走model 修改器.
     * @param boolgetId
     * @return bool|int
     */
    public function insert(array data,getId = false)
    {
        if (getId) {
            return make(this->model)->setConnection(this->connection)->insertGetId(data);
        }
        return make(this->model)->setConnection(this->connection)->insert(data);
    }

    /**
     * 走model修改器.
     * @return
     */
    public function create(arraydata)
    {
        qb = make(this->model)->setConnection(this->connection);
        returnqb->create(data);
    }

    /**
     * 更新数据.
     * @return int
     */
    public function updateBy(arrayfilter, array data)
    {qb = make(this->model)->setConnection(this->connection)->query();
        qb = queryFilter(filter, qb);
        returnqb->update(data);
    }

    /**
     * 删除数据.
     * @return int|mixed
     */
    public function deleteBy(arrayfilter)
    {
        qb = make(this->model)->setConnection(this->connection)->query();qb = queryFilter(filter,qb);
        return qb->delete();
    }

    /**
     * 最大值
     * @return mixed
     */
    public function max(arrayfilter, string column)
    {qb = make(this->model)->setConnection(this->connection)->query();
        qb = queryFilter(filter, qb);
        returnqb->max($column);
    }
}

zhaohao

大家好,欢迎来到赵豪博客!赵豪,94年生人,PHP程序员一枚,因为对PHP开发有着相对比较浓厚的兴趣,所以现在从事着PHP程序员的工作。 今天再次开通这个博客,这里将记录我的职业生涯的点点滴滴,感谢来访与关注!如果我的博客能给您带来一些帮助那真是一件非常荣幸的事情~

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

针对hyperf框架改造----仓库基类增删改查的封装
返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close