mehdirajabi/可过滤

通过数组查询字符串过滤 eloquent 模型

1.0.0 2023-07-26 11:25 UTC

This package is auto-updated.

Last update: 2024-09-22 16:56:04 UTC


README

简介

Laravel 可过滤特性是一个强大的包,提供了一种可重用的特性,可以轻松地在 Laravel Eloquent 模型中实现过滤功能。它允许根据多个参数过滤查询结果,使创建动态和灵活的 API 或数据过滤机制变得更加简单。

特性

  • 轻松在 Eloquent 模型中实现过滤。
  • 根据各种查询参数过滤数据。
  • 支持多种过滤类型,例如精确匹配、部分匹配、范围等。
  • 可定制和可扩展,以添加新的过滤类型。
  • 通过将过滤逻辑与主模型分离,提高代码的可读性和可维护性。

安装

您可以通过运行以下命令使用 Composer 安装该包

composer require mehdirajabi/filterable

用法

1. 将 Filterable 特性应用到您的 Eloquent 模型

打开您想要应用过滤功能的 Eloquent 模型,并添加 Filterable 特性

use Mehdirajabi\Filterable\Filterable;

class User extends Model
{
    use Filterable;
}

在您的控制器中

class UserController extends Controller
{
    public function index()
    {
        return User::filter()->actived()->get();
    }
}

2. 可过滤是如何工作的?

使用了两个查询字符串,filterColumns 和 filterValues,两者都是数组。所有列的默认操作符是 "like" 操作符。

例如

http://test.com/api/user/users?filterColumns[0]=name&filterValues[0]=Alex

3. 关联过滤

要过滤关系,请添加嵌套的列名。例如,如果用户与配置文件有关系,并且配置文件有一个 'sex' 列,请使用以下约定

use Mehdirajabi\Filterable\Filterable;

class User extends Model
{
    use Filterable;

    public function profile()
    {
        return $this->hasOne(UserProfile::class);
    }
}
http://test.com/api/user/users?filterColumns[0]=profile.sex&filterValues[0]=male

4. 更改过滤模式操作符

要更改 'status' 列的操作符,定义 filterMode 属性

use Mehdirajabi\Filterable\Operators\FilterEqual;

class User extends Model
{
    protected $filterMode = [
        'status' => FilterEqual::class
    ];
}

5. 在控制器中更改操作符

use Mehdirajabi\Filterable\Operators\FilterBetween;

class UserController extends Controller
{
    public function index()
    {
        return User::filter(['id' => FilterBetween::class])->paginate(100);
    }
}

介于操作符

use Mehdirajabi\Filterable\Operators\FilterBetween;

class User extends Model
{
    protected $filterMode = [
        'created_at' => FilterBetween::class
    ];
}
http://test.com/users?filterColumns[0]=created_at&filterValues[0]=2023-06-23 00:00:00, 2023-06-24 23:59:59