nemesis/laravel-filter-and-sorting

此软件包最新版本(4.0.3)没有提供许可证信息。

过滤和排序特性

4.0.3 2017-05-04 15:54 UTC

README

过滤和排序特性

连接

将 FilterAndSorting 特性连接到模型。如果您想获取嵌套模型,需要声明方法 extraFields(),

该方法将返回可以在嵌套中获取的关系列表。具体如何使用将在下面说明

    class SomeModel extends Model
    {
        use FilterAndSorting;

        ...

        public function extraFields()
        {
            return ['someRelation'];
        }

        ...

        public function someRelation()
        {
            return $this->hasOne(SomeRelation::class);
        }
    }

它作为作用域连接到模型,使用时,在查询模型时需要调用它

  public function index(Request $request)
  {
      return SomeModel::setFilterAndRelationsAndSort($request)->get()
  }

使用过滤器

要过滤,需要使用 get 参数 filter,在其中放置包含过滤字段和参数的 json。

允许的参数

isNull - 可选参数,接受 true 或 false,添加 AND $key IS NULL 或 AND $key IS NOT NULL 到查询中

operation - 选择逻辑操作,接受 '>','<','>=','<=','<>','not in','in','like'

value - 选择值,如果使用 "operation":"in" 或 "operation":"not in",则可能为数组

from 和 to - 范围。可以单独使用。如果传入日期,将自动转换为 "计算机格式",也可以传递数字。使用 >= 和 <= 操作符,即 from 和 to 的值包含在查询中。

可以不使用参数,直接写作 {"id":1},那么将执行查询 WHERE id = 1(如果有其他选择参数,则 AND 将被插入)

查询示例

/message?filter={"created_at":{"from":"2016-02-20","to":"2016-02-24 23:59:59"}, "id":{"operation":"not in", "value":[2,3,4]}}

/message?filter={"id":{"from":2,"to":5}}

/message?filter={"id":{"to":5}} 和 /message?filter={"id":{"operation":"<=","value":5}} - 等价

/message?filter={"updated_at":{"isNull":true}}

/message?filter={"answer":{"operation":"like","value":"Partial search string"}} - 假定全文搜索,添加条件:WHERE answer LIKE "%Partial search string%"

/message?filter={"answer":"Full search string"} - 精确搜索字符串

过滤器允许对嵌套模型进行过滤

/message?filter={"user.name":"asd"}

嵌套模型必须在方法 extraFields 中允许,可以像对当前模型进行过滤一样进行过滤

使用嵌套模型过滤器

要过滤,需要使用 get 参数 filterExpand,它的工作方式与普通过滤器类似,只是过滤嵌套模型中的数据

使用排序

可以按当前模型或嵌套模型排序。排序需要传递 get 参数 sort。

默认排序为 ASC,如果需要 DESC,则在排序字段前加 "-"

排序示例

/message?sort=id

/message?sort=-id

/message?sort=user.name

获取嵌套模型

要获取嵌套模型(关系),需要在模型的 extraFields 方法中允许它们,并在请求中添加 get 参数 expand。

查询示例

/message?expand=user

响应示例

{ "id": 1, "message": "some message", "user_id": 1, ... "user": { "id": 1, "name": "Some username", ... } }