cyd622 / laravel-filterable
Laravel 包,用于通过 URL 查询字符串动态过滤 Eloquent 结果。
Requires
- php: >=5.3.0
- illuminate/support: >=4.1
This package is not auto-updated.
Last update: 2024-09-21 13:37:36 UTC
README
此包为您提供了一种方便的方法,可以根据 URL 中的查询字符串参数自动过滤 Eloquent 结果。Filterable 解析查询字符串,将其与您希望自动过滤的列进行比较,然后创建一个动态作用域,供 Eloquent 用于构建 SQL。
安装
将包添加到 composer.json 文件中的 'require' 部分
"require": {
"cyd622/laravel-filterable": "dev-master"
},
从命令行运行 'composer dump-autoload'
#composer dump-autoload
在 app/config/app.php 中注册服务提供者。服务提供者
'providers' => array(
\\...
'Laravel\Filterable\FilterableServiceProvider',
\\...
);
许可证
版权 2014 Dave Hodgins。在 MIT 许可证下发布(https://open-source.org.cn/licenses/MIT)。有关详细信息,请参阅 LICENSE 文件。 使用方法
注意:此包还包括一个版本(FilterableWrapper.php),可用于包装 DB 或 Eloquent 对象,以及一个版本(FilterableTrait.php),可作为 Eloquent 模型的 trait 使用。
Filterable.php
编辑您的 Eloquent 模型以扩展 'Laravel\Filterable\Filterable'。
class Object extends Laravel\Filterable\Filterable {
// ...
}
FilterableWrapper.php
为 FilterableWrapper 提供一个 DB 或 Eloquent 对象。
$object = DB::table('objects');
$objects = FilterableWrapper($object);
FilterableTrait.php
class Object extends Eloquent {
use Laravel\Filterable\FilterableTrait;
}
以下示例使用 Filterable 类!
在上面的示例中,类 Object 对应于表 'objects'。
Filterable 列
指定您希望自动过滤的列。
$columns = [ 'color', 'shape', 'total' ];
例如
http://www.your-site/?color=blue&shape=round&total=500
您还可以为列设置别名,如果您不希望公开它们
$columns = [ 'col' => 'color', 'sha' => 'shape', 'tot' => 'total' ];
例如
http://www.your-site/?col=blue&sha=round&tot=500
要过滤结果,只需将列传递给 Eloquent 使用 filterColumns() 方法
$objects = Object::filterColumns($columns)->get()->toArray();
您还可以过滤连接
$columns = array('color' => 'objects.color',
'name' => 'objects.name',
'shape' => 'objects.shape',
'category' => 'cat_object.cat_id');
$objects = Object::join('cat_object', 'objects.id', '=', 'cat_object.object_id')
->filterColumns($columns)
->get()->toArray();
并且您可以过滤预加载
/**
* Columns available in main query
*/
$columns = array('color' => 'objects.color',
'name' => 'objects.name',
'shape' => 'objects.shape');
$objects = Object::with(array('categories' => function($q) {
/**
* Columns available to sub-query
*/
$columns = array('category' => 'cat_object.cat_id');
$q->filterColumns($columns);
}))->filterColumns($columns)
->get()
->toArray();
以下示例演示了如何使用查询字符串参数。 单值
?color=red
SELECT ... WHERE ... color = 'red'
?color[]=red&color[]=blue
SELECT ... WHERE ... color = 'red' OR color = 'blue'
?color[]=red&shape[]=triangle
SELECT ... WHERE ... color = 'red' AND shape = 'triangle'
?color[]=red&shape[]=triangle&bool[shape]=or
SELECT ... WHERE ... color = 'red' OR shape = 'triangle'
大于
?total=599&operator[total]=>
SELECT ... WHERE ... total > '599'
小于
?total=600&operator[total]=<
SELECT ... WHERE ... total < '600'
不等于
?shape=triangle&operator[shape]=!=
SELECT ... WHERE ... shape != 'triangle'
介于
?total[start]=900&total[end]=5000
SELECT ... WHERE ... total BETWEEN '900' AND '5000'