hasnath/queryable

Laravel Queryable

v0.1.0 2020-04-16 17:57 UTC

This package is auto-updated.

Last update: 2024-09-29 05:55:38 UTC


README

Total Downloads Latest Stable Version License

介绍

Queryable 提供了查询构建器助手,如 FilterOrderBy,以使 API 创建更加容易。

需求

使用 Queryable 需要以下内容

Laravel 
PHP 7

安装

要开始使用,请通过 Composer 包管理器安装 Queryable

composer require hasnath/queryable

QueryableServiceProvider 添加到 config/app.php 中的 providers

HasnatH\Queryable\Providers\QueryableServiceProvider::class

发布配置文件

php artisan vendor:publish --provider="HasnatH\Queryable\Providers\QueryableServiceProvider"

配置

配置文件将被发布为 config/queryable.php

<?php

return [
    'filter' => [
        'separator' => env('QUERYABLE_FILTER_SEPARATOR', ',')
    ],

    'orderBy' => [
        'separator' => env('QUERYABLE_ORDER_BY_SEPARATOR', ',')
    ],
];

用法

实例化一个新的 Queryable 并传入要使用的模型

使用可用的 Queryable 方法

<?php

use App\User;
use HasnatH\Queryable\Queryable;

class UserService 
{    
    protected $queryable;

    public function index() 
    {
        $queryable = new Queryable(User::class);

        $query = User::query();
        
        $query = $queryable->filter($query, request()->get('filter'));
        $query = $queryable->orderBy($query, request()->get('orderBy'));
    
        return $query->get();
    }

}

筛选

Queryable 允许您轻松筛选数据库查询

配置

config/queryable.php 中的 filter 数组中可以找到 filter 方法的特定配置

默认情况下,可以筛选模型中的所有字段

要覆盖要筛选的字段,请将以下内容添加到您的模型中

public static $filterable = [
    'first_name',
    'last_name'
];

任何包含模型/筛选器中不存在字段的筛选器都将被忽略。

格式

要应用筛选器,请在对 Queryable 实例调用 filter 方法。 filter 方法接受两个参数: $query$filters

$query 参数是您的查询构建器的一个实例

$query = User::query();
$query = auth()->user();

$filter 参数是以下格式的您的筛选器数组

[
    "FIELD,VALUE,OPERATOR",
]

每个筛选器都需要 FIELDVALUE 字段。

OPERATOR 字段是可选的,默认为 =

以下 OPERATORS 可以使用

= 
< 
> 
<= 
>=
<>
!=
LIKE
NOT LIKE
BETWEEN
ILIKE

您可以应用任意多的筛选器。

例如,要应用 first_namelast_name 的筛选器

[
    ["first_name,John"],
    ["last_name,Smith"]   
]

默认的 filter 方法分隔符是 ,

此值来自 config/queryable.phpfilter.separator

要更改分隔符,请更新配置中的 filter.separator 值或在 .env 文件中添加一个变量

QUERYABLE_FILTER_SEPARATOR=|

然后您需要以以下格式传递筛选器

[
    ["first_name|John"],
    ["last_name|Smith"]   
]

用法示例

以下示例将传递通过请求传递的任何筛选器并应用它们

public function index() 
{
    $queryable = new Queryable(User::class);
    
    $filters = request()->get('filter');

    $query = User::query();
    
    $query = $queryable->filter($query, $filters);

    return $query->get();
}

要获取具有 first_name Johnid 大于 3 的用户

GET /users?filter[]=first_name,John&filter[]=id,3,>

排序

Queryable 允许您轻松排序数据库查询

配置

config/queryable.php 中的 orderBy 数组中可以找到 orderBy 方法的特定配置

默认情况下,您可以按模型中的所有字段应用排序

要覆盖要排序的字段,请将以下内容添加到您的模型中

public static $orderable = [
    'first_name',
    'last_name'
];

任何包含模型/排序中不存在字段的排序将被忽略。

格式

要应用排序,请在 Queryable 实例上调用 orderBy 方法。 orderBy 方法接受两个参数: $query$fields

$query 参数是您的查询构建器的一个实例

$query = User::query();
$query = auth()->user();

$fields 参数是以下格式的您的排序字段数组

[
    "FIELD,ORDER",
]

每个排序都需要 FIELD 字段。

ORDER 字段是可选的,默认为 ASC

以下 ORDER 值可以使用

ASC
DESC

您可以应用任意多的排序。

例如,按 first_name 排序,然后按 last_name 排序

[
    ["first_name"],
    ["last_name,DESC"]   
]

orderBy方法的默认分隔符是,

此值从config/queryable.phporderBy.separator获取

要更改分隔符,请在配置中更新orderBy.separator值或在.env文件中添加变量

QUERYABLE_ORDER_BY_SEPARATOR=|

然后您需要以以下格式传递筛选器

[
    ["first_name"],
    ["last_name|DESC"]   
]

用法示例

以下代码将传递通过请求传递的任何订单并应用它们

public function index() 
{
    $queryable = new Queryable(User::class);
    
    $filters = request()->get('filter');

    $query = User::query();
    
    $query = $queryable->orderBy($query, $filters);

    return $query->get();
}

按照升序对first_name进行排序,然后按照降序对id进行排序

GET /users?orderBy[]=first_name&orderBy[]=id,DESC

许可证

Queryable是一个开源软件,受MIT许可证许可。