kayckmatias / z-filters
动态过滤 Laravel 模型的一种简单方法
Requires
- php: ^8.0
This package is not auto-updated.
Last update: 2024-09-30 18:32:11 UTC
README
一个简单的包,可以过滤 Laravel 模型,无需重复循环或各种 if-else 语句
安装
您可以通过 composer 安装此包
composer require kayckmatias/z-filters
使用
您只需要两件事:创建一个新的过滤器并在模型中创建一个作用域来指向过滤器。
创建新的过滤器
php artisan make:zfilter NameFilter
示例
根据您的偏好配置您的过滤器选项(阅读这里)
现在,需要在您的模型中创建一个作用域,例如
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 用♥制作