geeckon / laravel-eloquent-filters
轻松在laravel eloquent模型上应用过滤器
8.0.1
2022-12-16 06:06 UTC
Requires
- php: >=7.4
- laravel/framework: ^8.0
This package is not auto-updated.
Last update: 2024-09-24 19:08:37 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 许可证 许可。