Laravel账单销毁时同步扣减Product Service库存的问题求助
解决Laravel账单销毁时同步扣减Product Service数量的问题
你需要在销毁账单前,先遍历该账单关联的所有BillProduct记录,对每个产品调用Utility::total_quantity方法扣减product service的数量,之后再删除BillProduct记录。
修改后的destroy方法代码如下:
public function destroy(Bill $bill) { if (\Auth::user()->can('delete bill')) { if ($bill->created_by == \Auth::user()->creatorId()) { // 获取当前账单关联的所有BillProduct记录 $billProducts = BillProduct::where('bill_id', '=', $bill->id)->get(); // 遍历每条记录,同步扣减product service的数量 foreach ($billProducts as $billProduct) { Utility::total_quantity('minus', $billProduct->quantity, $billProduct->product_id); } $bill->delete(); if ($bill->vender_id != 0) { Utility::userBalance('vendor', $bill->vender_id, $bill->getTotal(), 'debit'); } // 删除账单关联的BillProduct记录 BillProduct::where('bill_id', '=', $bill->id)->delete(); } } }
关键说明:
- 必须先处理数量扣减再删除BillProduct,否则删除后无法获取产品ID和数量信息
- 复用了你在
update方法中使用的Utility::total_quantity方法,保持和创建/更新时一致的数量同步逻辑 - 先查询所有关联记录再遍历,避免在操作过程中出现数据丢失问题
内容的提问来源于stack exchange,提问作者Mehdi Bakhtiari
相关产品推荐
相关产品推荐

