hugorut/filterable

一个用于处理查询过滤的Laravel包

0.0.1 2015-12-06 14:14 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:59:01 UTC


README

Build Status #Fiterable 一个提供流畅接口来对Eloquent查询应用约束的包

例如

#Set the package to run all constraints against an Article model
$filter = Filter::setType('articles');

#filter those articles by the Page and Author model so that only
#articles that appear with these contraints are returned
$filter->only([
    'pages' => [1, 2], 
    'authors' => [4, 7, 9]
])->get();

安装

首先,通过Composer拉入此包。

composer require hugorut/filterable

config/app.php 中包含服务提供者。

'providers' => [
    Hugorut\Filter\Laravel\FilterServiceProvider::class,
];

然后在同一文件的底部添加 facade 别名

'aliases' => [
    'Filter'    => Hugorut\Filter\Laravel\Filter::class,
];

然后,在项目根目录下运行以发布包资源

php artisan vendor:publish

你应该看到类似的终端输出

Copied File [/vendor/Filter/src/Hugorut/Filter/config.php] To [/config/filter.php]
Publishing complete for tag []!

使用方法

配置

首先,你需要向包提供关于哪些模型是可过滤的以及哪些模型可以应用过滤器的知识。在发布包资源后,将你的设置添加到位于 app\config\filter.php 的包配置文件中。

Builders 数组中添加你希望应用过滤器的模型

'Builders' => [
    'articles' => 'App\Article'
],

Filters 数组中添加你希望过滤的模型

'Filters' => [
    'pages' => 'App\Page',
    'authors' => 'App\Author'
],

API

强烈建议您使用 Filter facade 或依赖注入来访问包功能,因为这个类有许多依赖,Laravel 的 IOC 容器可以解决这些依赖。

使用 Filter 类很简单,首先设置一个您希望应用过滤器的模型(并在过滤配置文件中进行了别名设置)。

$filter = Filter::setType('articles');

现在过滤器已经配置为正确的模型,您可以在过滤器上调用 onlywithout 方法。

$filter->only(['pages' => [1, 2]]);
/*-----
* or
-----*/
$filter->without(['pages' => [1, 2]]);

这两个方法都是关联数组。这个关联数组的键是模型别名(如您的 app\config\filter.php 配置文件中定义的那样),值是这些模型的ID数组。

在过滤器上调用 get 方法,然后查询数据库并返回过滤后的结果。

$filter->get();