ionext / laravel-api-query-parser
基于Laravel框架的REST-API查询解析器
Requires
- php: ^7.3
- laravel/framework: ^7.0
Requires (Dev)
- mockery/mockery: ^1.3
- phpunit/phpunit: ^8.5
README
描述
这是一个基于Laravel框架的REST-API简单请求查询参数解析器。
要求
- PHP >=7.2
- Laravel框架 >= 6.2
- Mockery >= 1.3 (开发)
- PHPUnit >= 8.4 (开发)
安装
- 将ionext/laravel-api-query-parser添加到您的composer.json文件中,然后执行composer update,或composer require ionext/laravel-api-query-parser
- 设置服务提供者:在config/app.php中添加以下行
'providers' => [ ... ApiQueryParser\Provider\RequestQueryParserProvider::class, ... ];
用法
// app/API/V1/Models/UserController.php namespace App\Api\V1\Http\Controllers; use App\Models\User; use App\Api\V1\Resources\UserResource; use App\Api\V1\Resources\UserResourceCollection; use ApiQueryParser\ResourceQueryParserTrait; use ApiQueryParser\BuilderParamsApplierTrait; class UserController extends Controller { use ResourceQueryParserTrait; use BuilderParamsApplierTrait; public function index(Request $request) { $params = $this->parseQueryParams($request); $query = User::query(); $paginator = $this->applyParams($query, $params); return UserResourceCollection::make( $paginator ); } }
查询语法
预加载
Q: /users?connection[]=profile
R: 将返回包含其资料的用户的集合
筛选
Q: /users?filter[]=name:ct:admin
R: 将返回包含包含admin字符串名称的用户的集合
可用的筛选选项
| 操作符 | 描述 | 示例 |
|---|---|---|
| ct | 字符串包含 | name:ct:Peter |
| nct | 字符串不包含 | name:nct:Peter |
| sw | 字符串以...开头 | username:sw:admin |
| ew | 字符串以...结尾 | email:ew:gmail.com |
| eq | 等于 | level:eq:3 |
| ne | 不等于 | level:ne:4 |
| gt | 大于 | level:gt:2 |
| ge | 大于等于 | level:ge:3 |
| lt | 小于 | level:lt:4 |
| le | 小于等于 | level:le:3 |
| in | 在数组中 | level:in:1|2|3 |
| nin | 不在数组中 | level:nin:1|2|3 |
关于基于关联值的筛选的说明
现在可以使用表.列的表示法来基于关联值进行筛选。例如:comments.author:eq:mike
定位
Q: /users?location=longitude_field:latitude_field:0.000000:0.000000:10 R: 这需要用户具有经度和纬度字段。它将返回在提供的纬度和经度(10km)范围内的用户的集合。每个实体的距离将通过自定义距离列传递。由于Laravel中的一个错误,当使用位置时,将使用简单的分页器。这意味着最后一页将为空。
高级定位,连接表
问题:/users?location=longitude_field:latitude_field:0.000000:0.000000:10:offices|office_id
排序
问题:/users?sort[]=name:ASC
回答:将按用户名升序返回用户集合
分页
问题:/users?limit=10&page=3
回答:将返回用户集合的一部分(从第21条到第30条)
版权信息
该软件包最初由Gábor Németh开发(github: https://github.com/ngabor84),用于Laravel Lumen(https://github.com/ngabor84/lumen-api-query-parser)。为了与Laravel兼容,该软件包需要进行一些重构。