farzin/filter-maker

此包的最新版本(dev-master)没有可用的许可信息。

为您的数据表创建清理过滤器的一个包

dev-master 2017-12-21 09:45 UTC

This package is auto-updated.

Last update: 2024-09-18 02:44:06 UTC


README

(Laravel 5.5)

当您需要创建查询字符串过滤器时,您可能就是那些使用 if 语句 来扩展 Laravel QueryBuilder 以构建最终查询的人之一,这是一个不好的方法,而且在未来维护您的代码会很困难。通过此包,您可以体验到实现查询字符串过滤器的魔法。

步骤1

安装

composer require farzin/filter-maker:"dev-master"

添加服务提供者

Farzin\FilterMaker\FilterMakerProvider::class

发布配置文件

php artisan vendor:publish

现在在Laravel配置文件夹中,您可以看到filter-maker配置文件。假设您有一个用户列表,并想创建查询字符串过滤器,如

/users?first_name=test&last_name=test

您可以定义您的配置文件如下

return [
    'UserFilter' => [
       //inputs
        'first_name',
        'last_name'
    ]
];

步骤2

现在运行此命令

php artisan make:filter

现在在app目录中,您可以看到Filters目录和UserFilter类。您可以看到为每个输入创建的方法,这是您定义查询构建器语句的地方:示例

public function firstName($value)
{
	$this->builder->where('first_name', $value);
}

public function lastName($value)
{
	$this->builder->where('last_name', $value);
}

步骤3

创建自定义服务提供者

php artisan make:provider SampleServiceProvider

并在您的app.php配置文件中添加此提供者。我们必须延迟加载此提供者,因为我们不需要在每个请求中加载此提供者。我们使用Laravel上下文绑定来将构建器绑定到我们的过滤器类,更多信息请参阅:上下文绑定

一个示例提供者 :

    protected $defer = true;
    public function register()
{
    $this->app->when(UserFilter::class)->needs(Builder::class)->give(function () {
        return #query;
    });
}

public function provides()
{
    return [
     UserFilter::class
    ];
}

现在在您的控制器方法中注入过滤器并使用 applyFilter() 方法,现在您有了过滤后的查询!就这样!您可以在数据表中使用此构建器实例...示例

public function userList(Request $request, App\Filters\UserFilter $userFilter) 
{
    $query = $userFilter->applyFilter(); // Builder Instance
}

任何时候您都可以在配置文件中添加新的queryString变量,只需将其添加到数组中并运行artisan命令即可