duuany/eloquent-filters

一个最简单的 Eloquent 查询过滤器包。

2.2 2022-05-26 23:08 UTC

This package is auto-updated.

Last update: 2024-08-27 03:49:12 UTC


README

一个最简单的 Laravel Eloquent 模型 URL 查询过滤器包。

安装

您可以通过 composer 进行安装

Laravel 5.5+

$ composer require duuany/eloquent-filters

###Laravel 5.4 或更高版本

$ composer require duuany/eloquent-filters:1.1

将服务提供者添加到 config/app.php 文件中

Duuany\EloquentFilters\EloquentFiltersServiceProvider::class

可选,您可以发布配置文件以覆盖包配置

$ php artisan vendor:publish --provider="Duuany\EloquentFilters\EloquentFiltersServiceProvider" --tag="config"

用法

在您的模型中添加以下 HasFilters 特性

class User extends Model 
{
    use HasFilters;
}

在您的应用文件夹的任何位置创建一个 UserFilter 类。过滤器类定义了一组适用的过滤器。对于添加到过滤器数组中的每个过滤器,您都需要实现过滤器逻辑。

您可以通过 artisan 命令创建过滤器

$ php artisan make:filter FilterName
class UserFilter extends EloquentFilters
{
    protected $filters = [
        'order', 'popular', ....
    ]; 
    
    protected function order($column)
    {
        return $this->builder->orderBy($column, 'desc');
    }
}

您可以为您的过滤器传递多个参数,如下所示

    protected function order($column, $sort = 'desc')
    {
        return $this->builder->orderBy($column, $sort);
    }

当向过滤器传递多个参数时,请确保在查询字符串中使用分隔符。

http://myurl.dev?order=id:asc

默认分隔符是 :,但您可以通过重写 protected $delimiter 属性来修改它。

示例
class UserFilter extends EloquentFilters
{
    protected $delimiter = '|';
    
    ...
}

在查询字符串...

http://myurl.dev?order=id|asc

... 请注意,不要使用特殊的查询字符串字符,如分隔符。

魔法调用

可选,您可以省略 ->builder

// this...
return $this->builder->orderBy($column, $sort);

// can be called like this...
return $this->orderBy($column, $sort);

现在在您的应用程序中,您可以使用以下方式使用过滤器

class UserController extends Controller
{
    public function index(UserFilter $filters)
    {
        $users = User::filter($filters)->get();
    }
}

当用户访问 URL https:///?order=id 时,将应用 order 过滤器到 User 模型。

测试

$ ./vendor/bin/phpunit

致谢

许可

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