leocarmo/laravel-eloquent-model-filter

轻松过滤 Eloquent 模型

1.0.0 2018-08-21 19:21 UTC

This package is auto-updated.

Last update: 2024-08-29 05:07:24 UTC


README

Code Quality Build Status Code Intelligence Status Total Downloads

现在您可以动态地过滤模型。这并不是一个强大的搜索系统,但当您需要更多时间在其他功能上并且需要简单的过滤器时,这可以帮助您处理小型项目。

composer require leocarmo/laravel-eloquent-model-filter

使用方法

首先,在您的模型上实现 Trait,例如这样

use LeoCarmo\ModelFilter\Traits\FilterableModel;
use Illuminate\Database\Eloquent\Model;

class YourModel extends Model
{

    use FilterableModel;

}

现在您可以使用所有可用方法,我们稍后会详细介绍。但是在此之后,使用此过滤器所有功能需要一些必需的属性。

第一个属性是 filterable,使用这些可以设置允许的过滤器以及此属性的运算符。如下所示

class YourModel extends Model
{

    use FilterableModel;

    protected $filterable = [
        'id',
        'name' => 'LIKE',
        'email',
        'age' => '>=',
        'phone'
    ];

}

第二个是 filterable_select,使用这些可以设置查询时选择的列。这对于快速查询非常重要。如果此属性不存在于模型中,将返回所有列(* 运算符)。

class YourModel extends Model
{

    use FilterableModel;

    protected $filterable_select = [
        'id', 'name', 'email', 'age'
    ];

}

现在,所有必需的配置都已设置。您可以通过这种方式开始所有过滤

class YourController
{

    public function filter(Request $request)
    {
        return (new YourModel)->filter($request->all())->get();
    }

}

重要:此 Trait 返回 Illuminate\Database\Query\Builder 实例,因此您可以像使用 paginate()orderBy() 等方法一样增强您的过滤器。

技巧

默认运算符是 =,因此对于所有查询,将使用此运算符。您可以使用 changeDefaultOperator() 方法更改此运算符。

当您使用 LIKE 运算符时,搜索将是:%SEARCH%

可用方法

为了完全控制,您可以在特定请求中更改模型默认过滤器配置。

pushFilterableSelect()

此方法将向选择查询推送新列。

示例:在您的模型中定义了 idname,但在特定请求中您想显示 age,您可以使用此方法。

$model->pushFilterableSelect('age');
// OR
$model->pushFilterableSelect(['age', 'created_at']);

pushFilterable()

使用此方法,您可以向允许的过滤器推送新列或更改现有列的运算符。

如果您推送的列在模型上定义为具有 filterable 属性和运算符的列,则原始值将使用新运算符覆盖。

// this first example will not overide the original column if the default value has an operator seted, but will push to the allowed filters if was not defined
$model->pushFilterable('age'); 

// this example will overide the original operator
$model->pushFilterable(['age' => '>']);

changeDefaultOperator()

当在模型上未定义运算符时,默认运算符是 =。如果您想,您可以更改此运算符。

$model->changeDefaultOperator('LIKE'); 

致谢