moiseskalebe / laravel-lazy-filters
traits 以简化使用 Eloquent/Laravel 创建列表筛选器的过程
Requires
- php: >=8.1
- laravel/framework: >=8
Requires (Dev)
- fakerphp/faker: ^1.16
README
介绍
欢迎使用 Laravel Lazy Filters,这是一个简化筛选、排序、搜索和分页记录体验的解决方案。这款应用程序源于改进数据可视化和交互的需求,提供了一种创新的方法来高效地简化筛选和显示记录的过程。
目录
要求
需要 PHP 8.0+ 和 Laravel 框架
安装
要安装此依赖项,只需执行以下命令
composer require moiseskalebe/laravel-lazy-filters
使用
为了使用此包,您需要记住一些信息。
该包从 Laravel 框架提供的 Request 对象开始工作,因此请记住参数需要在接收 API 时进行验证。
为了执行筛选、排序、搜索和分页操作,应记住以下标准
配置
filter
用于筛选记录
sort
用于排序结果
limit
用于限制返回的结果数量
可搜索
这个 trait 提供了 processSearch()
方法,该方法接收一个 Illuminate\Database\Eloquent\Builder
对象作为参数,并读取通过查询字符串传递的筛选器。
💡 要在查询中使用它们: filter[nomeCampo][operador]
可用操作符列表
可分页
这个 trait 提供了 buildPagination()
方法,该方法接收一个 Illuminate\Database\Eloquent\Builder
对象作为参数,以及第二个参数 int $perPage
,表示每页的结果数量。此方法读取传递给 Builder 的当前状态,从而执行已配置的分页和基于次要参数的 limit(默认为 40)。
可以在请求中通过查询字符串传递 perPage
参数。
例如: ?filter[name][like]=devs&perPage=100
在一个列表中,可以通过传递 bool skipPagination
参数来忽略分页。
例如: ?filter[name][like]=devs&skipPagination=1
执行后,会分配一个 data
参数和一个 paginationData
参数,其中 data
将包含所有与原始属性匹配的记录,而 paginationData
将是有关分页的元数据。
可限制
这个 trait 读取请求中传递的 limit
查询,并仅返回指定的记录数量。例如: ?filter[name][like]=devs&limit=100
可排序
这个 trait 提供了 processSort()
方法,该方法接收一个 Illuminate\Database\Eloquent\Builder
对象作为参数,并读取传递给 Builder 的当前状态以执行排序。
💡 要在查询中使用它: sort
作为请求中的查询字符串。
例如: ?filter[name][like]=devs&sort=createdAt
查询字符串示例
以下是每个情况的查询、描述和示例的表格
查看应用示例
<?php declare(strict_types=1); use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use MoisesK\LaravelLazyFilters\Limitable; use MoisesK\LaravelLazyFilters\Paginatable; use MoisesK\LaravelLazyFilters\Searcheable; use MoisesK\LaravelLazyFilters\Sorteable; final class ExampleController { use Searcheable; use Sorteable; use Limitable; use Paginatable; public function listAllRegisters(Request $request): JsonResponse { // Crie uma query Laravel Way com Model::query() $query = ExampleModel::query(); //Chame os metodos das traits conforme precise usar, vide documentação $this->processSearch($query); $this->processSort($query); $this->buildPagination($query); // Propriedade que ficara armazenado os registros apos os filtros. $this->data // Propriedade que ficara armazenado os dados de paginação. $this->paginationData } }
贡献
对此项目的贡献是通过拉取请求(PR)进行的。在发送贡献之前,请确保遵循以下步骤
-
分支存储库
- 将存储库分支到您的 GitHub 帐户。
- 将分叉的仓库克隆到您的本地机器。
-
创建一个分支以贡献您的代码
- 创建一个新的分支来工作于您的贡献。
-
进行修改
- 在代码中实现必要的更改。
-
测试您的修改
- 确保您的修改按预期工作。
- 如有必要,执行额外的测试。
-
提交拉取请求:
- 提交您的修改。
- 向主仓库提交拉取请求。
拉取请求的指南
在提交拉取请求时,请遵循以下指南
- 清楚地描述您的拉取请求引入的更改。
- 提供关于更改原因的详细信息。
- 如果可能,通过问题编号引用特定问题。
为了使拉取请求的审查过程更加高效,以下是一些个人偏好
- 使用与项目其余部分一致的编码风格。
- 包括新功能或修复的单元测试。
- 保持提交消息清晰简洁。
编码愉快!🚀