crazynds / query-pipeline
用于Laravel项目中自定义搜索的查询管道。
1.0.10
2024-04-18 03:27 UTC
Requires
- php: ^8.1
- illuminate/contracts: ^9.0|^10.0|^11.0
- illuminate/support: ^9.0|^10.0|^11.0
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: >=6.0
README
此软件包包含可用于Laravel Pipeline的类集合。
可以执行与pipeline-query-collection包相同的操作,但语法不同,并给用户带来更多可能性。
允许您为连接实现条件,并在传递某些数据时添加WHERE子句。
安装
您可以通过composer安装此包
composer require crazynds/query-pipeline
用法
请参见下面的示例
use Crazynds\QueryPipeline\Middleware\ILIKEQuery; use Crazynds\QueryPipeline\Middleware\JoinQuery; use Crazynds\QueryPipeline\QueryPipeline; class ClientController extends Controller { use QueryPipeline; public function index(Request $request){ $page = $request->input('page', 1); $qtd = $request->input('qtd', 20); $query = Client::query(); $data = $request->all(); $query = $this->runPipeline($query,$data,[ JoinQuery::class => [ //table to join 'addresses' => [ 'on' => [ // required 'clients.address_id', '=', 'addresses.id', ], 'checkParameters'=>[ // optional, if any items from this array exist in the data keys, the join will be added to the query // if not passed checkParameters, the join will be added in any condition 'country', 'state', 'city', ], ] ], ILIKEQuery::class => [ //table name 'clients'=>[ //columns 'name', 'code', 'email', ], 'addresses'=>[ 'country', 'state', 'city', ] ], ]); return $query->paginate($qtd); } }
步骤
- 首先将Crazynds\QueryPipeline\QueryPipeline中的QueryPipeline特质添加到您的类中。
- 设置您的中间件堆栈变量
- 将基本查询、您的数据值和您的堆栈发送到$this->runPipeline,查询管道将运行。
- 开心吧 :>
中间件
在这个上下文中,中间件意味着查询处理的一个步骤。请查看src/middleware文件夹中的所有中间件。
每个中间件都有您自己的参数堆栈,请参见以下规格
连接查询
连接查询中间件根据作为参数传递的条件添加连接查询。每个连接查询可以包含多个连接。
数组中的每个项接收的基本对象如下所示
<?php $middlewareStack = [ JoinQuery::class => [ //table to join 'table' => [ 'on' => [ // required 'table.foreign_id', '=', 'othertable.id', ], 'checkParameters'=>[ ], ] ] ];
“on”数组仅限于只有简单的验证,没有多个WHERE子句。因此,数组只接收3个参数,左侧列、比较器和右侧列。
“checkParameters”数组,如果没有定义,则每次都将连接添加到查询中。如果已定义,则只有当数组中的字符串是数组数据中的键时,才将连接添加到数组中;
ILIKE查询
ILIKE查询中间件在查询中添加一个WHERE子句,比较类型为LIKE,不区分大小写。查询会自动在值的字符串开头和结尾添加%。
数组中的每个项接收的基本对象如下所示
<?php $middlewareStack = [ ILIKEQuery::class => [ //table name 'clients'=>[ 'name', // this iten will check clients.name ilike %.$data['name'].% 'code' => 'ssn', // this iten will check clients.name ilike %.$data['ssn'].% 'email', ], ], ];
测试
composer test
变更日志
请参阅CHANGELOG获取有关最近更改的更多信息。
致谢
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。