crazynds/query-pipeline

用于Laravel项目中自定义搜索的查询管道。

1.0.10 2024-04-18 03:27 UTC

This package is auto-updated.

Last update: 2024-09-05 05:24:14 UTC


README

Latest Version on Packagist Total Downloads

此软件包包含可用于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);
    }
}

步骤

  1. 首先将Crazynds\QueryPipeline\QueryPipeline中的QueryPipeline特质添加到您的类中。
  2. 设置您的中间件堆栈变量
  3. 将基本查询、您的数据值和您的堆栈发送到$this->runPipeline,查询管道将运行。
  4. 开心吧 :>

中间件

在这个上下文中,中间件意味着查询处理的一个步骤。请查看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)。有关更多信息,请参阅许可文件