rafflesargentina/l5-filterable-sortable

一个用于过滤和排序查询构建器结果的特性,基于 Laracasts/Dedicated-Query-String-Filtering。

v2.6.0 2020-06-24 01:58 UTC

This package is not auto-updated.

Last update: 2024-09-25 21:17:18 UTC


README

Latest Version on Packagist Software License Build Status Total Downloads

一个用于过滤和排序查询构建器字符串的特性,基于 Laracasts/Dedicated-Query-String-Filtering。

安装

通过 Composer

$ composer require rafflesargentina/l5-filterable-sortable

用法

将 FilterableSortableTrait 添加到你的 Eloquent 模型中,以便使用 filter() 和 sorter() 范围。这两个都应用了必须作为函数定义在单独的类中的子句到 Builder 实例。因此,您必须向模型添加 $filters 和 $sorters 属性来设置这些类。

示例

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

use RafflesArgentina\FilterableSortable\FilterableSortableTrait;

use App\Filters\ArticleFilters;
use App\Sorters\ArticleSorters;

class Article extends Model
{
    use FilterableSortableTrait;

    public $filters = ArticleFilters::class;

    public $sorters = ArticleSorters::class;

    // ...
}

QueryFilters

创建一个继承自 QueryFilters 的类,并定义每个请求数据作为链式查询过滤器的名称的方法。您可以在函数内部使用任何逻辑,只要它们返回一个 Builder 实例。

示例

<?php

namespace App\Filters;

use RafflesArgentina\FilterableSortable\QueryFilters;

class ArticleFilters extends QueryFilters
{
    public function title($query)
    {
        return $this->builder->where('title', 'LIKE', '%'.$query.'%');
    }

    public function author($query)
    {
        return $this->builder->where('user_id', $query);
    }

    public function category_id($query)
    {
        return $this->builder->where('category_id', $query);
    }
}

您还可以静态访问类方法 getAppliedFilters(),以获取从请求中应用的所有过滤器的数组。

QuerySorters

创建一个继承自 QuerySorters 的类,并定义每个请求数据作为链式查询排序器的名称的公共方法。您可以在函数内部使用任何逻辑,只要它们返回一个 Builder 实例。默认顺序和默认 orderBy 必须通过 $defaultOrder 和 $defaultOrderBy 静态属性设置。可选地,您可以通过 $orderKey 和 $orderByKey 静态属性定义 order 和 orderBy 键。

示例

<?php

namespace App\Sorters;

use RafflesArgentina\FilterableSortable\QuerySorters;

class ArticleSorters extends QuerySorters
{
    // These properties are optional:

    protected static $orderKey = 'orden'; // Fallback value is 'order'

    protected static $orderByKey = 'ordenarPor'; // Fallback value is 'orderBy'

    // And there are mandatory:

    protected static $defaultOrder = 'asc';

    protected static $defaultOrderBy = 'title';

    public function title()
    {
        return $this->builder->orderBy('title', $this->order());
    }

    public function published_at()
    {
        return $this->builder->orderBy('updated_at', $this->order())
                             ->orderBy('title', $this->order());
    }

}

您还可以访问这些静态类方法来获取排序器类的受保护数据:getOrderKey(),getOrderByKey(),getDefaultOrder(),getDefaultOrderBy()。使用 getAppliedSorters() 从请求中获取应用了排序器的列表。或者使用 listOrderByKeys() 来填充下拉选择器。

您可以从控制器或任何您想要的位置获取筛选和排序后的记录,如下所示

// ...

$items = Article::filter()->sorter()->paginate();

// ...

就是这样 :)

测试

$ composer test

贡献

有关详细信息,请参阅 CONTRIBUTINGCONDUCT

安全

如果您发现任何安全相关的问题,请通过电子邮件 mario@raffles.com.ar 而不是使用问题跟踪器。

致谢

许可证

MIT 许可证 (MIT)。请参阅 许可证文件 获取更多信息。