leonardjke/laravel-query-filter

Laravel 包,用于通过 URL 查询字符串动态过滤 Eloquent 结果。

dev-master 2020-04-26 11:00 UTC

This package is auto-updated.

Last update: 2024-09-26 20:50:32 UTC


README

基于 heroicpixels/filterable (https://github.com/heroicpixels/filterable) 此包提供了一种方便的方法,可以根据 URL 中的查询字符串参数自动过滤 Eloquent 结果。Filterable 解析查询字符串,将其与您希望自动过滤的列进行比较,然后创建一个动态作用域,Eloquent 使用该作用域构建 SQL。

安装

将包添加到 composer.json 文件中的 'require' 部分

"require": {
    "leonardjke/laravel-query-filter": "dev-master"
},

从命令行运行 'composer dump-autoload'

#composer dump-autoload

许可证

版权 2020 leonardjke

在 MIT 许可证下发布 (https://open-source.org.cn/licenses/MIT)。有关详细信息,请参阅 LICENSE 文件。

用法

Filterable.php

class Object extends Eloquent {

   use Leonardjke\LaravelQueryFilter\Filterable;

}

以下示例使用 Filterable 类!

在上面的示例中,类 Object 对应于表 'objects'。

可过滤列

指定您希望自动过滤的列。

$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

要过滤结果,只需通过 filter() 方法将列传递给 Eloquent 即可

$objects = Object::filter($requers)->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'