moiseskalebe/laravel-lazy-filters

traits 以简化使用 Eloquent/Laravel 创建列表筛选器的过程

v1.0.0 2023-11-13 21:02 UTC

This package is auto-updated.

Last update: 2024-09-13 23:09:49 UTC


README

介绍

欢迎使用 Laravel Lazy Filters,这是一个简化筛选、排序、搜索和分页记录体验的解决方案。这款应用程序源于改进数据可视化和交互的需求,提供了一种创新的方法来高效地简化筛选和显示记录的过程。

目录

  1. 介绍
  2. 目录
  3. 要求
  4. 安装
  5. 使用
  6. 配置
  7. 筛选
  8. 分页
  9. 限制
  10. 排序
  11. 查询字符串示例
  12. 查看应用示例

要求

需要 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)进行的。在发送贡献之前,请确保遵循以下步骤

  1. 分支存储库

    • 将存储库分支到您的 GitHub 帐户。
    • 将分叉的仓库克隆到您的本地机器。
  2. 创建一个分支以贡献您的代码

    • 创建一个新的分支来工作于您的贡献。
  3. 进行修改

    • 在代码中实现必要的更改。
  4. 测试您的修改

    • 确保您的修改按预期工作。
    • 如有必要,执行额外的测试。
  5. 提交拉取请求:

    • 提交您的修改。
    • 向主仓库提交拉取请求。

拉取请求的指南

在提交拉取请求时,请遵循以下指南

  • 清楚地描述您的拉取请求引入的更改。
  • 提供关于更改原因的详细信息。
  • 如果可能,通过问题编号引用特定问题。

为了使拉取请求的审查过程更加高效,以下是一些个人偏好

  • 使用与项目其余部分一致的编码风格。
  • 包括新功能或修复的单元测试。
  • 保持提交消息清晰简洁。

编码愉快!🚀