hasnath / queryable
Laravel Queryable
Requires
- php: ^7.2
- ext-json: *
- illuminate/support: ^7.0
Requires (Dev)
- mockery/mockery: ^1.0
- orchestra/testbench: ^4.4|^5.0
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-29 05:55:38 UTC
README
介绍
Queryable 提供了查询构建器助手,如 Filter 和 OrderBy,以使 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",
]
每个筛选器都需要 FIELD 和 VALUE 字段。
OPERATOR 字段是可选的,默认为 =
以下 OPERATORS 可以使用
=
<
>
<=
>=
<>
!=
LIKE
NOT LIKE
BETWEEN
ILIKE
您可以应用任意多的筛选器。
例如,要应用 first_name 和 last_name 的筛选器
[
["first_name,John"],
["last_name,Smith"]
]
默认的 filter 方法分隔符是 ,
此值来自 config/queryable.php 的 filter.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 John 且 id 大于 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.php的orderBy.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许可证许可。