<?php/***+------------------* madong*+------------------* Copyright (c) https://gitee.com/motion-code All rights reserved.*+------------------* Author: Mr. April (405784684@qq.com)*+------------------* Official Website: http://www.madong.tech*/namespace madong\query;use Illuminate\Database\Eloquent\Builder;use Illuminate\Database\Eloquent\Model;use madong\query\exception\QueryParseException;/*** 查询参数管理器* 提供统一的查询参数处理入口,支持依赖注入*/class QueryParamsManager{/*** @var QueryParamParser*/private QueryParamParser $parser;/*** @var QueryBuilderHelper*/private QueryBuilderHelper $helper;/*** 构造函数** @param QueryParamParser|null $parser* @param QueryBuilderHelper|null $helper*/public function __construct(?QueryParamParser $parser = null,?QueryBuilderHelper $helper = null) {$this->parser = $parser ?? new QueryParamParser();$this->helper = $helper ?? new QueryBuilderHelper();}/*** 应用查询参数到查询构建器** @param Builder|Model $queryOrModel* @param array $params* @param array $options* @return Builder*/public function apply(Builder|Model $queryOrModel, array $params, array $options = []): Builder{$query = $queryOrModel instanceof Model ? $queryOrModel->query() : $queryOrModel;return $this->helper->apply($query, $params, $options);}/*** 解析查询参数** @param array $params* @return array*/public function parse(array $params): array{return $this->parser->parse($params);}/*** 创建查询构建器** @param string $modelClass* @return Builder*/public function create(string $modelClass): Builder{if (!class_exists($modelClass)) {throw QueryParseException::invalidField("模型类不存在: {$modelClass}");}return $modelClass::query();}/*** 快速分页查询** @param Builder|Model $queryOrModel* @param array $params* @param array $options* @return array*/public function paginate(Builder|Model $queryOrModel, array $params, array $options = []): array{$query = $queryOrModel instanceof Model ? $queryOrModel->query() : $queryOrModel;// 应用查询参数$query = $this->helper->apply($query, $params, $options);// 解析分页$parsed = $this->parser->parse($params);// 执行分页return $this->helper->paginate($query, $parsed['page'], $parsed['pageSize']);}/*** 快速查询所有** @param Builder|Model $queryOrModel* @param array $params* @param array $options* @return array*/public function all(Builder|Model $queryOrModel, array $params, array $options = []): array{$query = $queryOrModel instanceof Model ? $queryOrModel->query() : $queryOrModel;// 应用查询参数$query = $this->helper->apply($query, $params, $options);return $query->get()->toArray();}/*** 快速查询第一条** @param Builder|Model $queryOrModel* @param array $params* @param array $options* @return array|null*/public function first(Builder|Model $queryOrModel, array $params, array $options = []): ?array{$query = $queryOrModel instanceof Model ? $queryOrModel->query() : $queryOrModel;// 应用查询参数$query = $this->helper->apply($query, $params, $options);$result = $query->first();return $result ? $result->toArray() : null;}/*** 快速统计数量** @param Builder|Model $queryOrModel* @param array $params* @param array $options* @return int*/public function count(Builder|Model $queryOrModel, array $params, array $options = []): int{$query = $queryOrModel instanceof Model ? $queryOrModel->query() : $queryOrModel;// 应用查询参数$query = $this->helper->apply($query, $params, $options);return $query->count();}/*** 获取解析器实例** @return QueryParamParser*/public function getParser(): QueryParamParser{return $this->parser;}/*** 获取构建器辅助类实例** @return QueryBuilderHelper*/public function getHelper(): QueryBuilderHelper{return $this->helper;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。