CakePHP 5如何获取分页总记录数?从CakePHP 4迁移适配
CakePHP 5 中API返回分页数据的实现方法
在CakePHP 5中,请求对象不再存储分页数据,需通过Paginator组件来获取分页参数,以下是对应你原有CakePHP 4代码的实现方案:
1. 确保控制器加载Paginator组件
如果你的控制器未默认加载该组件,需在initialize()方法中添加:
public function initialize(): void { parent::initialize(); $this->loadComponent('Paginator'); }
2. 获取分页参数并组装返回结构
方式1:获取指定模型的分页参数
适用于仅对单个模型分页的场景,替换YourModelName为实际模型名称:
// 获取指定模型的分页参数 $pagingParams = $this->Paginator->getPagingParams('YourModelName'); // 组装与原有结构一致的分页数据 $paginacao = [ "count" => $pagingParams['total'], // 对应原4.x中的count(总记录数) "current" => $pagingParams['count'], // 对应原4.x中的current(当前页记录数) "perPage" => $pagingParams['perPage'], "page" => $pagingParams['page'], "requestedPage" => $pagingParams['requestedPage'], "pageCount" => $pagingParams['pageCount'], "start" => $pagingParams['start'], "end" => $pagingParams['end'], "prevPage" => $pagingParams['hasPrevPage'], // 对应原4.x中的prevPage "nextPage" => $pagingParams['hasNextPage'], // 对应原4.x中的nextPage ];
方式2:遍历所有模型的分页参数
与你原有代码的foreach逻辑一致,处理多模型分页场景:
// 获取所有模型的分页参数 $allPagingParams = $this->Paginator->getPagingParams(); $paginacao = []; foreach ($allPagingParams as $params): $paginacao = [ "count" => $params['total'], "current" => $params['count'], "perPage" => $params['perPage'], "page" => $params['page'], "requestedPage" => $params['requestedPage'], "pageCount" => $params['pageCount'], "start" => $params['start'], "end" => $params['end'], "prevPage" => $params['hasPrevPage'], "nextPage" => $params['hasNextPage'], ]; endforeach;
关键变化说明
- CakePHP 5 移除了
$this->request->getAttribute('paging')的获取方式,统一通过Paginator组件的getPagingParams()方法获取分页数据 - 部分字段名有调整:
- 原
count(总记录数)→ 现total - 原
current(当前页记录数)→ 现count - 原
prevPage→ 现hasPrevPage - 原
nextPage→ 现hasNextPage
- 原
内容的提问来源于stack exchange,提问作者Sanderson Queiroz
相关产品推荐
相关产品推荐

