Laravel分页时为何返回不同类型的items数组?
解决Laravel分页返回数组类型不一致问题
问题根源
你当前的写法是先通过get()将所有数据加载到内存集合中,再调用集合的paginate()方法。集合分页与查询构造器分页的内部处理逻辑存在差异,再结合翻译包的字段处理机制,就会导致不同页码的items->items数组类型出现索引数组/关联数组不一致的情况。
修复方案
直接在查询构造器链上调用paginate(),避免先加载全量数据到集合:
return Model::withTranslation() ->with(['relation' => function ($relation) { $relation->withTranslation(); }]) ->paginate(self::PER_PAGE);
这种方式会让Laravel直接在数据库层面执行分页查询,返回的分页结果由框架统一处理,既能保证所有页码的items数组类型一致,也能让翻译包的字段被正确解析。
特殊场景处理(需先操作集合再分页)
如果业务上必须先对全量数据做集合级处理(比如自定义过滤),处理完成后记得用values()方法重置集合索引,确保分页时数组结构统一:
$models = Model::withTranslation() ->with(['relation' => function ($relation) { $relation->withTranslation(); }]) ->get() // 此处添加你的集合处理逻辑 ->values(); // 重置为连续数字索引 return $models->paginate(self::PER_PAGE);
内容的提问来源于stack exchange,提问作者drzej drzej
相关产品推荐
相关产品推荐

