rafflesargentina/l8-filterable-sortable

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

v1.0 2021-01-20 16:16 UTC

This package is not auto-updated.

Last update: 2024-09-27 08:38:58 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)。请参阅 许可证文件 了解更多信息。