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

Laravel中session push向购物车商品追加addon_id异常问题

问题根因

Laravel的session()->push()方法支持的点语法,是直接按数组键名匹配层级的。你写的session()->push('cart.addons', $request->addon_id),会直接在cart数组的最外层创建/追加addons键的值,完全不会定位到具体商品ID对应的子项内的addons数组,这就是所有附加项都被存到购物车最外层、和商品项平级的原因。

修复方法

直接替换原有追加附加项的代码即可,不要用点语法做动态定位,先取出完整购物车数组,操作对应商品的子项后再存回session:

if(isset($request->item_id) && isset($request->addon_id)) {
    // 取出完整购物车数据
    $cart = session()->get('cart', []);
    // 校验对应商品存在于购物车中再执行操作
    if(isset($cart[$request->item_id])) {
        // 追加前做去重判断,避免同一个附加项重复存入
        if(!in_array($request->addon_id, $cart[$request->item_id]['addons'])) {
            $cart[$request->item_id]['addons'][] = $request->addon_id;
        }
        // 把修改后的购物车存回session
        session()->put('cart', $cart);
    }
}

$cart = session()->get('cart', []);
return response()->json([
    'message' => 'Addon added',
    'cart' => $cart,
]);
额外优化建议
  • 补充参数校验:只有同时传入item_id和addon_id时才执行追加逻辑,避免空值触发报错
  • 补充商品存在校验:操作前先判断对应ID的商品确实在购物车内,防止给不存在的商品追加附加项
  • 补充去重逻辑:默认判断附加项ID已存在时不重复存入,如果业务允许同一个附加项重复添加,直接删掉in_array相关判断即可
  • 如果后续要做「取消勾选就删除对应附加项」的功能,逻辑完全一致:取出完整购物车数组,定位到对应商品的addons数组,找到目标addon_id的下标删除后,再把整个cart存回session即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:57:07