leocarmo / laravel-eloquent-model-filter
轻松过滤 Eloquent 模型
Requires
- php: >=7
This package is auto-updated.
Last update: 2024-08-29 05:07:24 UTC
README
现在您可以动态地过滤模型。这并不是一个强大的搜索系统,但当您需要更多时间在其他功能上并且需要简单的过滤器时,这可以帮助您处理小型项目。
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()
此方法将向选择查询推送新列。
示例:在您的模型中定义了 id
和 name
,但在特定请求中您想显示 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');