Laravel如何向session存储的已有collection集合追加新数组
问题根因
- 你初始存入
session('key')的是Laravel集合对象,session()->push()方法仅支持追加单个元素,你传入新集合时会把整个集合作为单个元素嵌套进原有集合,最终出现多层嵌套的非预期结果 - 原有代码中
Test::all()->where('id', 3)写法存在性能问题,会先查询全表所有数据再做内存过滤,建议直接在查询构造器层面加条件过滤
修复代码
if (session()->has('key')) { // 取出已存储的旧集合 $oldCollection = session('key'); // 查询新数据(直接在SQL层面过滤,性能更高) $newItems = Test::where('id', 3)->get(); // 平级合并两个集合的元素 $mergedCollection = $oldCollection->merge($newItems); // 覆盖存入session session()->put('key', $mergedCollection); } else { // 首次存储直接写入即可,Test::get()本身返回集合,无需额外collect()转换 session()->put('key', Test::where('id', 1)->get()); }
补充说明
如果后续仅需要追加单个模型实例,可直接调用集合自身的push方法实现:
$collection = session('key'); $collection->push(Test::find(3)); session()->put('key', $collection);
内容的提问来源于stack exchange,提问作者Martín
相关产品推荐
相关产品推荐

