You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中paginate与get()返回结果排序及数据不一致问题

解决Laravel分页时数据缺失/重复的问题

问题原因

你遇到的问题本质是排序规则不唯一导致的。当用orderByRaw处理position字段的排序时,若存在多条记录的position值相同(或同为NULL),数据库无法保证这些记录的返回顺序固定。而分页依赖稳定的结果顺序来计算OFFSET偏移量,顺序不稳定就会出现数据跳页、重复的情况。

解决办法

给排序规则补充一个唯一字段(比如表的主键id),确保每条记录的排序位置唯一,让数据库返回的结果顺序固定。修改后的查询语句如下:

$game->teams()
    ->orderByRaw('CASE WHEN position IS NULL THEN 0 ELSE 1 END DESC')
    ->orderBy('position')
    ->orderBy('id') // 新增主键排序,保证顺序绝对稳定
    ->with(['user'])
    ->paginate(15);

原理说明

数据库在处理LIMIT ... OFFSET ...分页时,必须依赖稳定的排序结果才能正确计算每页的内容。加上主键id后,即使多条记录的position排序值相同,最后也会通过唯一的id来确定顺序,这样每次查询的结果顺序完全一致,分页逻辑就不会出错了。

内容的提问来源于stack exchange,提问作者ssrsvn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:42:02