仓库系统API库存更新:如何获取历史入库数量并调整库存
解决仓库API更新库存时无法获取原始入库数量的问题
核心问题是你没在修改入库记录前留存原始的入库数量,导致无法执行「减旧量加新量」的库存调整逻辑。直接按以下方案修改代码即可解决:
关键思路
在更新入库记录的任何字段之前,先从数据库中读取这条记录关联的原始物品数量,再通过公式 库存 = 当前库存 - 原始数量 + 新数量 完成库存更新。
修改后的代码片段
public function update(EntradaUpdateFormRequest $request, $id) { $entrada = Entrada::findOrFail($id); // 第一步:先获取该入库记录对应的原始物品数量 // 假设Entrada模型与入库物品表是一对多关联,关联方法名为entradaItems $oldQuantidade = $entrada->entradaItems() ->where('item_id', $entrada_items["item_id"]) ->value('quantidade'); // 这里保留你原来的入库记录更新代码... // 第二步:执行库存调整逻辑 $inventario = Inventario::where('departamento_id','=',$entrada->departamento_id) ->where('local_id','=',$entrada->local_id) ->where('item_id','=',$entrada_items["item_id"]) ->first(); if ($inventario) { // 先减去原始入库数量,再加上新的入库数量 $inventario->quantidade = $inventario->quantidade - $oldQuantidade + $entrada_items["quantidade"]; $inventario->save(); } else { $inventario = new Inventario(); $inventario->departamento_id = $entrada->departamento_id; $inventario->item_id = $entrada_items["item_id"]; $inventario->local_id = $entrada->local_id; $inventario->quantidade = $entrada_items["quantidade"]; $inventario->qtd_alerta = 0; $inventario->save(); } }
补充说明
- 如果入库数量直接存储在
Entrada表的字段中(而非关联表),直接替换为$oldQuantidade = $entrada->quantidade;即可,无需查询关联表。 - 必须先获取原始数量,再执行入库记录的更新操作,否则数据库中的原始值会被新值覆盖,无法再获取。
- 若一个入库记录关联多个物品,需要循环遍历每个物品,分别执行上述库存调整逻辑,确保每个物品的库存都被正确更新。
内容的提问来源于stack exchange,提问作者Meliodas
相关产品推荐
相关产品推荐

