gurgentil/eloquent-filters

一个Laravel包,可以轻松为Eloquent模型添加查询过滤器

1.0.1 2021-01-15 22:10 UTC

This package is auto-updated.

Last update: 2024-09-16 11:54:56 UTC


README

Latest Version GitHub Workflow Status Quality Score MIT Licensed

此包提供了一种简单且优雅的方法,在不将模型类变成庞大的God对象的情况下,为Eloquent模型添加查询过滤器。

设置完成后,如果您正在构建一个API,例如,您可以简单地将以下代码片段添加到控制器中

User::filter($request->get('filter'))->get();

现在请求 /api/users?filter[name]=John 并开始乐趣。

安装

使用composer安装此包

composer require gurgentil/eloquent-filters

用法

创建一个继承自 Gurgentil\EloquentFilters\FilterBuilder 的过滤器构建器。这是您将注册Eloquent模型的所有过滤器的地方。

namespace App\Filters;

use Gurgentil\EloquentFilters\FilterBuilder;

class UserFilters extends FilterBuilder
{
    protected $availableFilters = [];
}

Gurgentil\EloquentFilters\Filterable 特性添加到您的模型类中。特性将在 App\Filters 中查找模型的过滤器构建器。

创建过滤器

运行artisan命令

php artisan make:filter Users/NameFilter

在您之前创建的构建器中注册过滤器

namespace App\Filters;

use App\Filters\Users\NameFilter;
use Gurgentil\EloquentFilters\FilterBuilder;

class UserFilters extends FilterBuilder
{
    protected $availableFilters = [
        'name' => NameFilter::class,
    ];
}

最后但同样重要的是,在 NameFilter 中实现您的查询

namespace App\Filters\Users;

use Gurgentil\EloquentFilters\Filter;
use Illuminate\Database\Eloquent\Builder;

class NameFilter implements Filter
{
    /**
     * Apply filter.
     *
     * @return Builder
     */
    public function apply(Builder $builder, $value)
    {
        return $builder->where('name', $value);
    }
}

您可以通过将过滤器列表传递给 filter 方法来对模型执行过滤查询

User::filter([
    'name' => 'John',
])->get();

测试

composer test

更新日志

请参阅 CHANGELOG 以获取有关最近更改的更多信息。

贡献

请参阅 CONTRIBUTING 以获取详细信息。

鸣谢

许可

MIT许可(MIT)。请参阅 许可文件 以获取更多信息。