otisz / laravel-eloquent-filter
从 URL 查询中灵活的 Eloquent 过滤器
v2.4.0
2024-05-30 14:48 UTC
Requires
- php: ^8.0
- illuminate/database: ^8.12|^9.0|^10.0|^11.0
- illuminate/http: ^8.12|^9.0|^10.0|^11.0
- illuminate/support: ^8.12|^9.0|^10.0|^11.0
README
Laravel 包,用于生成灵活的 Eloquent 过滤器。
安装
您可以通过 Composer 安装此包
composer require otisz/laravel-eloquent-filter
使用方法
使用 artisan 命令创建新的过滤器类
php artisan make:filter TestFilter
此命令将在 app/Filters
文件夹中生成一个新的过滤器类
<?php namespace App\Filters; use Illuminate\Http\Request; use Otisz\EloquentFilter\Filter; /** * @property \Illuminate\Database\Eloquent\Builder $builder * @method static \App\Filters\TestFilter boot($class) * @mixin \Illuminate\Database\Eloquent\Builder */ final class TestFilter extends Filter { /** * @param \Illuminate\Http\Request|null $request * * @return self */ public function search(Request $request = null) { // return $this; } /** * @param \Illuminate\Http\Request|null $request * * @return self */ public function order(Request $request = null) { // return $this; } }
如何在控制器中使用
有三种方法来启动过滤器类
// Eloquent Builder: TestFilter::boot(Model::query()); TestFilter::boot(Model::where('column', '=', 1)); // Namespace TestFilter::boot(Model::class); // Model TestFilter::boot(new Model);
过滤器类包含两个方法:search()
和 order()
。
您可以将 \Illuminate\Http\Request
或 \Illuminate\Foundation\Http\FormRequest
传递给这些方法,但不强制要求。
TestFilter::boot(Model::class)->search()->order();
如果您调用过滤器类中未定义的方法,它将自动调用 Builder 类。
例如,过滤器类没有 toSql()
方法:TestFilter::boot(Model::class)->toSql();
在这种情况下,toSql()
方法在 Builder 类中调用:$this->builder->toSql()
如果需要,您可以随意编写您的方法。
贡献
安全漏洞
如果您发现任何与安全相关的问题,请通过 leventeotta@gmail.com 发送电子邮件,而不是使用问题跟踪器。所有安全漏洞都将得到及时处理。
许可证
Laravel Eloquent Filter 包是开源软件,采用 MIT 许可证。