kayckmatias/z-filters

动态过滤 Laravel 模型的一种简单方法

0.0.1 2023-09-04 13:38 UTC

This package is not auto-updated.

Last update: 2024-09-30 18:32:11 UTC


README

一个简单的包,可以过滤 Laravel 模型,无需重复循环或各种 if-else 语句

Version Total Downloads License

安装

您可以通过 composer 安装此包

composer require kayckmatias/z-filters

使用

您只需要两件事:创建一个新的过滤器并在模型中创建一个作用域来指向过滤器。

创建新的过滤器

php artisan make:zfilter NameFilter

示例

Example new Filter Image

根据您的偏好配置您的过滤器选项(阅读这里

现在,需要在您的模型中创建一个作用域,例如

public function scopeFilterBy(Builder $query, array $filters)
{
    $filter = new UsersFilter($query, $filters);

    return $filter->apply();
}

配置

zFilters 支持 three 种过滤器类型:简单、关联和复杂。

简单过滤器

简单过滤器是一个 whereIn 条件,当您创建一个简单过滤器时,您是在说。

'custom_name' => 'column to verify set whereIn'

假设您的用户表有一个名为 "department_id" 的列,要创建一个简单过滤器,您只需要引用过滤器选项的名称,例如 "departments",以及列,例如 "department_id"。

'departaments' => 'departament_id'

现在发送到 $filters['departments'] 的值数组或单个值将在简单过滤器上的 whereIn 条件中进行过滤。

关联过滤器

关联过滤器是在关联中的 whereIn 条件,当您创建一个关联过滤器时,您是在说。

'custom_name' => ['relation' => 'column to verify set whereIn']

假设您的 User 模型与部门(departments())有关联,要创建一个关联过滤器,其中我们必须获取属于经理 1 或 2 的所有用户,我们可以这样做

'departments_manager' => ['departments' => 'manager_id']

现在发送到 $filters['departments_manager'] 的值数组或单个值将在 departments 关联的 manager_id 列上的 whereIn 条件中进行过滤。

复杂过滤器

复杂过滤器可以处理更具体的条件,它接受一个回调函数,您可以按任何方式过滤,让我们看另一个例子。假设您的用户表有一个名为 name 的列和一个名为 summary 的列,您期望通过值对两个条件进行复杂搜索,一种方法可以是

'search' => function ($q, $filterValue) {
    $q->where(function ($q) use ($filterValue) {
        $q->where('name', 'LIKE', "%" . $filterValue . "%");
        $q->orWhere('summary', 'LIKE', "%" . $filterValue . "%");
    });
}

命名为 'search' 的复杂过滤器选项将执行该函数,$q 的值将是正在形成的查询构建器,第二个参数 $filterValue 将自动应用于发送到 $filters['search'] 的内容,作为回调函数,您也可以对它进行处理,操纵发送的值,就像它在查询构建器内部一样。

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件


由 Kayck Matias 用♥制作