ionext/laravel-api-query-parser

此包已被废弃,不再维护。未建议替代包。

基于Laravel框架的REST-API查询解析器

v1.1.9 2021-09-10 12:30 UTC

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兼容,该软件包需要进行一些重构。