enimiste / laravel-eloquent-filters
轻松在 Laravel Eloquent 模型上应用过滤器
v5.5.0
2017-10-31 20:10 UTC
Requires
- php: >=7.0
- illuminate/database: 5.5.*
- illuminate/http: 5.5.*
- illuminate/support: 5.5.*
This package is auto-updated.
Last update: 2024-08-29 03:21:02 UTC
README
安装
使用以下命令使用 composer 安装此包
composer require "enimiste/laravel-eloquent-filters:5.5.*"
用法
在您的 Eloquent 模型中使用 trait Com\NickelIT\Filterables\Filterable
。
通过扩展类 Com\NickelIT\Filterables\QueryFilters
创建一个新的类,并将自定义过滤器定义为接受一个参数的方法。其中函数名称是过滤参数名称,参数是值。
示例
use Illuminate\Database\Eloquent\Builder; class LessonQueryFilters extends QueryFilters { /** * @param string $order * @return Builder */ public function popular($order = 'desc'): Builder { return $this->builder()->orderBy('views', $order); } /** * @param $level * @return Builder */ public function difficulty($level): Builder { return $this->builder()->where('difficulty', $level); } /** * @param string $order * @return Builder */ public function length($order = 'asc'): Builder { return $this->builder()->orderBy('length', $order); } }
使用此类,我们可以使用 HTTP 查询字符串:popular=desc&difficulty=beginner&length
或这些过滤器的任意组合。您是否使用 AND 条件或 OR 条件取决于您。
在控制器中,您可以这样应用这些过滤器:
class LessonController extends Controller { /** * @param Request $request * @return mixed */ public function index(Request $request) { $bag = new HttpRequestFiltersBag($request); //$bag = new ArrayFiltersBag(['popular' => 'asc', 'difficulty' => 'beginner']); $filter = new LessonQueryFilters($bag); return Lesson::filter($filter)->get();//you can send results to a blade view } }
感谢
https://github.com/laracasts/Dedicated-Query-String-Filtering
许可协议
Laravel Eloquent Filters 是开源软件,遵循 MIT 许可协议