el-mag/request-query

此包的最新版本(dev-master)没有可用的许可信息。

dev-master 2019-07-22 15:28 UTC

This package is auto-updated.

Last update: 2024-09-14 03:18:31 UTC


README

查询格式

排序

{
    sort: FIELD,
    order: ASC|DESC
}

{
    sort: {
        FIELD1: ASC|DESC,
        FIELD2: ASC|DESC,
        ...
    }
}

过滤

{
    filter: {
        FIELD1: VALUE1,
        FIELD2: VALUE2,
        FIELD3: {
            operator: '>',
            value: VALUE3
        }
    }
}

分页

{
    limit: NUMBER,
    page: NUMBER,
}
  • limit 默认为 10
  • page 默认为 1

分组

{
    group_by: FIELD,
    group_map: {
        1: "enabled",
        0: "disabled"
    }
}
  • group_map 是可选的,但如果提供,则结果中只显示映射的值。

用法

1. 使用 RequestQuery

<?php

use ElMag\RQ\RequestQuery;

class SomeController
{
    public function index(Request $request)
    {
        $query = (new SomeModel)->newQuery();
        
        $rq = new RequestQuery($request, $query);
        
        $rq->setSortFields('*'); // This is the default
        // OR: ['*']
        // OR: ['age', 'salary', ...]
        
        $rq->setFilterFields(/* Same as `setSortFields` */);
        
        $rq->handleSort()               // If needed
            ->handleFilter()            // If needed
            ->handlePagination();       // If needed

        $results = $query->get();
        $rq->handleGroupBy($results);   // If Needed
    }
    ...

2. 使用预先准备好的 FormRequestWithQuery 表单请求

<?php

use ElMag\RQ\FormRequestWithQuery;

class SomeController
{
    public function index(FormRequestWithQuery $request)
    {
        $query = (new SomeModel)->newQuery();
        
        $request->setSortFields('*'); // This is the default
        // OR: ['*']
        // OR: ['age', 'salary', ...]
        
        $request->setFilterFields(/* Same as `setSortFields` */);
        
        $request->setQuery($query)
            ->handleSort()                  // If needed
            ->handleFilter()                // If needed
            ->handlePagination();           // If needed

        $results = $query->get();
        $request->handleGroupBy($results);  // If Needed
    }
    ...

3. 在自定义表单请求中使用 FormRequestQuery 特性

<?php

class SomeController
{
    public function index(CustomFormRequest $request)
    {
        $query = (new SomeModel)->newQuery();

        $request->setQuery($query)
            ->handleSort()                  // If needed
            ->handleFilter()                // If needed
            ->handlePagination();           // If needed

        $results = $query->get();
        $request->handleGroupBy($results);  // If Needed
    }
    ...
<?php

use ElMag\RQ\FormRequestQuery;

class CustomFormRequest extends FormRequest
{
    use FormRequestQuery;
    
    protected $sortFields = '*';
    // OR: ['*']
    // OR: ['age', 'salary', ...]
    
    protected $filterFields = [/* Same as `sortFields` */];
}