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

Laravel下单后更新库存报Undefined variable: total_stock错误求助

问题修复方案

1 报错根因

  • 你手动将赋值改为'total_stock' => $total_stock时,没有提前定义$total_stock变量,直接调用未定义变量触发了Undefined variable报错
  • 存在隐藏逻辑错误:你查询商品用的是Food模型,但是更新库存的时候调用的是Product模型,模型类名不匹配,就算变量问题解决也会更新失败

2 修复代码

把你原有库存更新代码段替换为以下内容即可:

// 库存更新逻辑,建议放在Helpers::product_data_formatting调用前执行,避免格式化方法移除原始字段
$type = $c['variation'][0]['type'];
$var_store = [];
$variations = json_decode($product['variations'], true);
// 提前做库存校验,避免超卖
foreach ($variations as $var) {
    if ($type == $var['type']) {
        if ($var['stock'] < $c['quantity']) {
            return response()->json([
                'errors' => [
                    ['code' => 'stock', 'message' => '当前商品规格库存不足,剩余库存:'.$var['stock']]
                ]
            ], 400);
        }
        $var['stock'] -= $c['quantity'];
    }
    array_push($var_store, $var);
}
// 模型名改为和查询一致的Food
Food::where(['id' => $product['id']])->update([
    'variations'  => json_encode($var_store),
    'total_stock' => $product['total_stock'] - $c['quantity'],
]);

3 额外注意事项

  • 建议把库存更新和订单生成操作放在事务里执行,避免订单生成失败但库存已经扣减的超卖问题
  • 如果调整代码后仍读取不到$product['total_stock'],确认Helpers::product_data_formatting方法是否保留了total_stock字段,或者直接把库存更新逻辑移到该格式化方法调用前
  • 你当前只给普通商品加了库存更新逻辑,如果需要同步扣减促销活动商品库存,还需要在item_campaign_id不为空的分支里也加上同款库存更新代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:09:03