alitokmakci / model-filter
为 Eloquent 模型提供简单的查询过滤器
1.0.3
2021-10-15 12:22 UTC
Requires
- php: ^7.4|^8.0
This package is auto-updated.
Last update: 2024-09-15 19:04:48 UTC
README
Laravel Eloquent 模型简单查询过滤器构建器
安装
composer require alitokmakci/model-filter
创建过滤器
php artisan make:filter {queryName}
该命令将在 app/Http/Filter 目录下生成一个 Filter 类。
注意:您可以为想要的模型使用一个过滤器。
例如
如果您在 User 模型和 Transaction 模型上都有状态列,您可以为 User 和 Transaction 模型都使用状态过滤器。
过滤器是与列名一起工作的,而不是与模型本身!尽情使用它们!
用法
use ModelFilter\ModelFilter;
public function index()
{
$users = ModelFilter::filter(App\Models\User::class,
[
App\Http\Filters\Email::class,
App\Http\Filters\Status::class
]
)->get();
return response($users);
}
示例
对于上面的代码
1
URL: /users?email=example@example.com
执行 SQL: "select * from `users` where `email` = ?"
2
URL: /users?email=example@example.com&status=1
执行 SQL: "select * from `users` where `email` = ? and `status` = ?"
方法
只有一个可用方法
filter(string $model, array $filters)
返回 Laravel QueryBuilder,因此您可以链式调用所有 Eloquent 方法
自定义过滤器
过滤器会自动从其名称设置列名和查询名称,因此您在创建 Filter 对象后不需要编写任何代码!太好了!
如果您想自定义过滤器的列名或查询参数,可以查看以下内容
要更改某些过滤器的过滤列名,只需将其添加到自定义过滤器中
protected function setColumn(): string
{
return 'custom_column_name';
}
要更改查询过滤器的名称
protected function setQueryFilter(): string
{
return 'custom_query_filter_name';
}
因此,该过滤器将为 Laravel 查询构建器添加以下代码
where('custom_column_name', request('custom_query_filter_name'))