eth0 / laravel-filters
一个简洁的laravel模型过滤器,我们可以通过传递查询字符串来过滤laravel模型。
Requires
- php: ^7.2|^8.0
README
通过查询字符串清理地过滤laravel模型的方法。
安装
您可以通过以下命令使用composer安装此包:
composer require eth0/laravel-filters
该包将自动注册自己,但如果您的laravel版本小于5.5,您需要在您的config/app.php文件中添加 Mukja\LaravelFilters\LaravelFiltersServiceProvider::class,服务提供者。
文档
一旦安装了该包,将会有2个新的artisan命令。
php artisan make:filterphp artisan make:model:filter
然后我们只需输入php artisan make:filter ModelFilter即可生成新的模型过滤器,这将生成一个位于app/Filters/目录下的名为ModelFilter.php的新PHP文件,如下所示。
<?php namespace App\Filters\ModelFilter; use Mukja\LaravelFilters\FiltersAbstract; class ModelFilter extends FiltersAbstract { protected $filters = [ // ]; }
在$filters变量中,我们可以注册所有我们的模型过滤器。
<?php namespace App\Filters\ModelFilter; use Mukja\LaravelFilters\FiltersAbstract; use App\Filters\Model\{ ModelStatusFilter, ModelCreatedAtFilter }; class ModelFilter extends FiltersAbstract { protected $filters = [ 'status' => ModelStatusFilter::class, 'created_at' => ModelCreatedAtFilter::class ]; }
然而,我们还没有创建模型过滤器,所以让我们现在创建模型过滤器。
注意:技巧:如果您在文件名前添加一个前缀,如下所示Model,将在您的Filters文件夹中生成一个新的Model文件夹,这样您就可以保持过滤器整洁。
php artisan make:model:filter Model\ModelStatusFilter Model\ModelCreatedAtFilter
以下是生成的文件之一
<?php namespace App\Filters\Model; use Mukja\LaravelFilters\FilterAbstract; use Illuminate\Database\Eloquent\Builder; class ModelStatusFilter extends FilterAbstract { /** * Define column mappings. * @return array */ public function mappings () { return []; } /** * Filter the column. * @param Builder $builder * @param mixed $value * @return Builder $builder */ public function filter (Builder $builder, $value) { // } }
在 mappings 方法中,我们可以返回一个映射数组,例如,如果我们想将一些单词转换为匹配我们的数据库列,例如
public function mappings () { return [ 'status' => 'active', 's' => 'active' ]; }
接下来,在filter方法中,我们可以构建我们的查询过滤器,如下所示
/** * Filter the column. * @param Builder $builder * @param mixed $value * @return Builder $builder */ public function filter (Builder $builder, $value) { return $builder->where('status', $value); }
一旦我们准备好了一切,最后一步是将一个范围添加到我们的laravel模型中,该过滤器将被使用。
public function scopeFilter (Builder $builder, $request, array $filters = []) { return (new ModelFilter($request))->filter($builder); }
然后我们可以在应用程序的任何地方使用我们的模型过滤器,只需添加过滤器范围即可
$model = Model::filter($request);
现在我们已经设置了过滤器,这意味着我们现在可以向服务器发送查询字符串https:://example.com?status=active,这将返回所有状态为active的记录。
路线图
以下是即将到来的计划的概述
- 添加测试。
变更日志
请参阅CHANGELOG以获取有关最近更改的更多信息。
贡献
请随时提出任何拉取请求,以使此包变得更好。
安全
如果您发现任何与安全相关的问题,请通过电子邮件e.mukja@icloud.com联系,而不是使用问题跟踪器。
鸣谢
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。