enimiste/laravel-eloquent-filters

轻松在 Laravel Eloquent 模型上应用过滤器

v5.5.0 2017-10-31 20:10 UTC

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 许可协议