itsmill3rtime/l5-filterable-sortable

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

1.8.0 2019-07-19 00:23 UTC

This package is auto-updated.

Last update: 2024-09-19 12:07:45 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 的类,并定义每个您想用作链式查询过滤器的请求数据的方法名称。您可以在函数内部使用任何逻辑,只要它们返回一个 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 的类,并定义每个您想用作链式查询排序器的请求数据的方法名称。您可以在函数内部使用任何逻辑,只要它们返回一个 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)。请参阅 许可证文件 以获取更多信息。