Laravel分页调整每页展示条数时返回结果不一致如何解决?
问题根因
你遇到的是关系型数据库不稳定排序导致的分页结果异常问题:
- 当
ORDER BY指定的排序字段存在大量重复值时,数据库无法明确相同值行的排序优先级,不会保证这类行的返回顺序固定。 - 你通过CSV导入的大量投诉记录
created_at值完全相同,排序规则本身不唯一。不同limit参数下数据库可能走不同的查询执行计划,相同created_at的行返回顺序会发生变化,就出现了小分页正常、大分页多出未知记录的现象。 - 你移除
orderBy后Laravel默认按主键排序(主键是唯一值,排序规则稳定),功能恢复正常,刚好验证了这个根因。
解决方案
在原有排序规则后追加唯一字段(通常用主键ID)作为第二排序条件,保证排序规则全局唯一、结果稳定即可,修改后代码如下:
$complaints = Complaint::orderBy('created_at', 'DESC') ->orderBy('id', 'DESC') ->paginate($data['results']);
如果数据量较大,可给表加(created_at desc, id desc)联合索引,进一步提升排序查询的性能。
内容的提问来源于stack exchange,提问作者Miroslav Jesenský
相关产品推荐
相关产品推荐

