aelfannir / doctrine-api-paginator
简单、强大的数据库搜索、排序、过滤和分页包
Requires
- php: >=8.0
- doctrine/doctrine-bundle: ^2.4
- doctrine/orm: ^2.7
- guzzlehttp/guzzle: ^7.3
- symfony/console: 5.3.*
- symfony/flex: ^1.3.1
- symfony/yaml: 5.3.*
Requires (Dev)
- phpunit/phpunit: ^9.5
- symfony/browser-kit: 5.3.*
- symfony/css-selector: 5.3.*
- symfony/maker-bundle: ^1.20
- symfony/phpunit-bridge: 5.3.*
README
请确保全局安装了Composer,如Composer文档中的安装章节所述。
使用Symfony Flex的应用程序
打开命令行,进入您的项目目录,并执行以下命令
$ composer require aelfannir/doctrine-query-paginator
不使用Symfony Flex的应用程序
步骤 1:下载Bundle
打开命令行,进入您的项目目录,并执行以下命令以下载此bundle的最新稳定版本
$ composer require aelfannir/doctrine-query-paginator
步骤 2:启用Bundle
然后,通过将其添加到项目中config/bundles.php
文件中注册的bundle列表中来启用bundle
// config/bundles.php return [ // ... AElfannir\DoctrineQueryPaginator\DoctrineQueryPaginatorBundle::class => ['all' => true], ];
文档
过滤
过滤器描述了在数据库查询结果中包含的条件,这些条件基于表属性值。
过滤器可以是属性过滤器,也可以是通过使用逻辑"AND"
或"OR"
运算符连接多个属性过滤器而形成的复合过滤器。
复合过滤器可以嵌套。
属性过滤器
属性
类型 string
,要过滤的属性的名称或ID。
运算符
类型 string
,用于生成比较表达式的运算符ID。可能的值包括;
值
可以是以下类型之一 array
、string
或 number
示例
{ "filter": { "operator": "AND", "filters": [ { "property": "createdAt", "operator": "DATETIME.GTE", "value": "2021-01-01 00:00" }, { "property": "createdAt", "operator": "DATETIME.LT", "value": "2022-01-01 00:00" } ] } }
复合过滤器
一个compound filter
对象将多个数据库property filters
组合在一起。甚至一个compound filter
也可以在另一个compound filter
中组合。
compound filter
对象包含以下键之一
运算符
用于组合filters
的条件,可以是"AND"
或"OR"
filters
array
of property filters
示例
{ "filter": { "operator": "OR", "filters": [ { "property": "firstName", "operator": "STRING.EQ", "value": "Mohammed" }, { "operator": "AND", "filters": [ { "property": "createdAt", "operator": "DATETIME.GTE", "value": "2021-01-01 00:00" }, { "property": "createdAt", "operator": "DATETIME.LT", "value": "2022-01-01 00:00" } ] } ] } }
搜索
类型 string
,在目标表根属性中搜索
示例
{ "search": "foo" }
分页
类型 object
,应包含datatables分页工作所需的元数据。
pagination.page
类型 number
,当前页码。
pagination.pages
类型 number
,服务器上可用的总页数。
pagination.perPage
类型 number
,当前页码。
pagination.total
类型 number
,服务器上可用的总记录数。
示例
- 请求
{ "pagination": { "page": 1, "perPage": 10 } }
- 响应
{ "pagination": { "page": 1, "perPage": 10, "total": 100, "pages": 10 } }
排序
排序对象描述了数据库查询结果的顺序。数据库查询端点接受一个在sorts body参数中的排序对象数组。在数组中,索引越低的对象优先级越高。每个排序对象包含以下键
属性
类型 string
,要排序的属性的名称。
direction
排序方向。可能的值包括 "ASC"
和 "DESC"
。
示例
{ "sorts": [ { "property": "firstName", "direction": "ASC" }, { "property": "lastName", "direction": "DESC" } ] }
连接
table
类型 string
,连接表名。
alias
可选,类型 string
,请注意,当alias未定义时,表值用作连接表的别名。
join
可选,array
of join conditions,
示例
{ "join": [ { "table": "category", "join": [ { "table": "parent", "alias": "subCategory", "join": [ { "table": "parent", "alias": "subCategory2" } ] } ] } ] }