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"
}
]
}
]
}
]
}