geeckon/laravel-eloquent-filters

轻松在laravel eloquent模型上应用过滤器

8.0.1 2022-12-16 06:06 UTC

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 许可证 许可。