farzin / filter-maker
为您的数据表创建清理过滤器的一个包
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命令即可