有没有办法使用 ApiPlatform 分页来获取总项目?
Posted
技术标签:
【中文标题】有没有办法使用 ApiPlatform 分页来获取总项目?【英文标题】:Is there a way to get total items using ApiPlatform Pagination? 【发布时间】:2021-05-22 09:18:49 【问题描述】:我正在尝试使用 bootstrap-vue 对表客户端进行分页。我试图分页的 api 资源实际上有 44 个项目。
bootstrap-vue 分页组件需要一个 total-row 属性来获取总页数(基于每页的项目)/resource
GET
响应返回 hydra:totalItems: 15
15 实际上是我在 App/config/packages/api_platform.yaml 配置中的默认 itemsPerPage,如下:
collection:
exists_parameter_name: 'exists'
order: 'DESC'
order_parameter_name: 'order'
pagination:
enabled: true
partial: true
client_enabled: true
client_items_per_page: true
client_partial: true
items_per_page: 15
maximum_items_per_page: 100
page_parameter_name: 'page'
enabled_parameter_name: 'pagination'
items_per_page_parameter_name: 'itemsPerPage'
partial_parameter_name: 'partial'
partial=true/false 和 ?itemsPerPage=x 的结果相同。
分页本身正在工作:如果我调用 ?page=1
或 ?page=2
我得到正确的项目,但 hydra:totalItems
总是指基于 itemsPerPage 参数返回的项目。
另外,根据ApiPlatform docs,我还应该收到一个hydra:view
对象,其中包含关于下一个、上一个和最后一个项目的信息,只是在服务器上使用其默认值启用分页,但它不在响应中。
有没有办法接收分页集合和总数? 当前配置: ApiPlatform v. 1.2.2 Symfony 5.1
【问题讨论】:
使用 api 平台 2.6,我确实得到了查询结果中的总行数,与分页无关。也许你可以更新api平台? The releases page 表示“旧版本(1.x、2.0...)不再维护。如果您仍在使用它们,则必须尽快升级。” 如果您的 api 返回 jsonld,您应该获得 hydra:view 对象。如果确实是您允许返回的格式配置问题(api_platform.yaml),您必须在请求中使用正确的 mime_type 【参考方案1】:我将此问题视为业务逻辑,而不是 API 平台功能
我相信最简单的方法是在实体的对象存储库中实现一个查询,该查询计算记录总数并使用 getter 返回到您的实体的属性。
了解如何通过 Symfony 文档Querying for Objects: The Repository 实现这一目标
【讨论】:
这是我的第一个想法,但是通过这种方法,我会在每个对象中得到一个 totalitems 字段,这也是有效的;但我需要它在外面 数据传输对象 (DTO) 可能是您的解决方案 api-platform.com/docs/core/dto以上是关于有没有办法使用 ApiPlatform 分页来获取总项目?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有 Pageable 的 Spring Data JPA 分页来更改数据?
cakePHP 使用 post 数据分页,无需会话、序列化或 post 来获取