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
相关产品推荐
相关产品推荐

