在实际项目中,我们会遇到同时更新数据库中某个表(下称表A)中的多条数据,而更新得内容则需要取自于另外一张表(下称表B),表A和表B都是从数据库中get方式取得的数据,在这种情况下我们可以这么做:
// 根据商家Id查找出所有的商品信息
$goodsInfo = Goods::whereIn('shop_id', explode(',', $sidStr))->get();
// 根据订单id查找出所有的订单商品信息
$storeOrderInfo = OrderGoods::whereIn('order_id', explode(',', $orders->order_ids))->get()->toArray();
// 通过使用array_reduce方法获得关联数组['goods_id'=>goods_quantity]
$goodsSaleAmount = array_reduce($storeOrderInfo, function ($r, $i) {
!isset($r[$i['goods_id']]) ? $r[$i['goods_id']] = 0: $r[$i['goods_id']] += $i['goods_quantity'];
return $r;
});
// 循环遍历要更新的商品信息 foreach ($goodsInfo as $key=>$item) {
// 根据商品信息中的id判断关联数组中是否存在该id对应的销售量
if (isset($goodsSaleAmount[$item->id])) {
// 更新商品信息
$item->update([
// 商品信息的库存减去该商品对应商品订单的销售量
'goods_stocks' => $item->goods_stocks - $goodsSaleAmount[$item->id],
// 商品信息的销售量加上该商品对应商品订单的销售量
'goods_sales_volume' => $item->goods_sales_volume + $goodsSaleAmount[$item->id]
);
}
}
上面代码的逻辑是在订单完成后,对商品库存已经销售额进行更新。循环要更新的数据集,对要作为操作数的集合进行处理。
版权申明:内容原创,版权归原创者所有。如要转载请联系作者。