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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:48:02