alitokmakci / model-filter

为 Eloquent 模型提供简单的查询过滤器

1.0.3 2021-10-15 12:22 UTC

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'))