arielsand / mongodb-eloquent-api-filter-mapping
从API调用URL直接过滤Monolog/Eloquent查询的绝佳简单方法
Requires
- php: >=7.2
- illuminate/http: >=5.4
- jenssegers/mongodb: ^3.7
This package is not auto-updated.
Last update: 2024-09-24 18:02:59 UTC
README
从API调用URL直接过滤Monolog/Eloquent查询的绝佳简单方法
安装
composer require arielsand/mongodb-eloquent-api-filter-mapping
使用示例
使用特性
class UserController extends Controller
{
use Arielsand\MoloquentApiFilter\Traits\FiltersMoloquentApi;
public function index(Request $request)
{
$users = User::query();
return $this->filterApiRequest($request, $users);
}
}
使用类
use Arielsand\MoloquentApiFilter\MoloquentApiFilter;
class UserController extends Controller
{
public function index(Request $request)
{
$query = User::query();
$filtered = (new MoloquentApiFilter($request, $query))->filter(['value' => 'address'], true);
return $filtered->get();
}
}
文档
版本1.1中新功能
通过and/or链式使用多个查询
.../model?filter[field]=like:*val1:and:like:val2*:or:null
将导致
SELECT * FROM models
WHERE (
field LIKE '%val1'
AND field LIKE 'val2%'
)
OR field IS NULL
添加特性
现在您可以使用Matthenning\EloquentApiFilter\Traits\FiltersEloquentApi来简单地使用以下方式过滤您的请求
$this->filterApiRequest($request, $query);
URL语法
.../model?filter[field]=operator:comparison
.../model?filter[field]=operator
运算符
like, notlike, today (对于时间戳), nottoday (对于时间戳), null, notnull, ge (大于等于), gt (大于), le (小于等于), lt (小于), eq (等于)
示例查询
匹配所有以Rob开头且去世为null的实体
.../users?filter[name]=like:Rob*&filter[deceased]=null
一个字段上的多个过滤器可以链式使用。匹配所有created_at在2016-12-10和2016-12-08之间的实体
.../users?filter[created_at]=lt:2016-12-10:and:gt:2016-12-08
通过点表示法过滤相关模型字段。匹配所有包含"API"的Post名称的用户Post
.../users?filter[posts.name]=like:*API*
过滤时间戳。匹配所有生日在今天的用户
.../users?filter[birthday]=today
限制和排序。匹配年龄为21岁或以上的前10名用户,按名称升序排序
.../users?filter[age]=ge:21&order[name]=asc&limit=10
已知问题
- 按相关字段排序尚不可用。