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

仓库系统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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:10:16