CakePHP 2.10分页:自定义totalLimit后实际结果数显示异常
解决CakePHP 2.10分页totalLimit显示异常问题
问题分析
你当前的paginateCount方法只要检测到totalLimit参数就直接返回固定值,完全忽略了实际过滤后的结果数量,导致结果少于20000时仍显示20000。
快捷解决方案
修改模型中的paginateCount方法,先调用框架原生的计数逻辑获取实际结果数,再返回实际数与totalLimit的较小值:
public function paginateCount($conditions = null, $recursive = 0, $extra = array()) { // 调用父类方法获取实际符合条件的记录数 $actualCount = parent::paginateCount($conditions, $recursive, $extra); // 如果设置了totalLimit,返回实际数和上限值的较小者 if (isset($extra['totalLimit'])) { return min($actualCount, $extra['totalLimit']); } // 没有设置totalLimit时返回实际数 return $actualCount; }
原理说明
- 复用CakePHP原生的
paginateCount逻辑,无需自己编写额外的计数查询,避免重复代码和潜在的查询错误 - 通过
min()函数确保总记录数不会超过你设定的totalLimit上限,同时在结果更少时显示真实数量 - 完全兼容你现有的分页配置,不需要修改控制器中的分页设置代码
内容的提问来源于stack exchange,提问作者Ryan H
相关产品推荐
相关产品推荐

