$row[0], 'external_sku_id' => $row[1], 'item' => [] ]; } else { $main[$row[1]]['item'][] = [ 'item_code' => $row[2], 'item_num' => $row[3], ]; } } foreach ($main as $info) { if (empty($info['item'])) { continue; } DB::beginTransaction(); try { $itemCodes = array_column($info['item'], 'item_code'); $skus = GoodsSku::query() ->whereIn('external_sku_id', $itemCodes) ->get(['id', 'external_sku_id', 'stock', "sale_stock"]) ->toArray(); $skus = ArrayUtils::index($skus, 'external_sku_id'); $stock = []; $saleStock = []; foreach ($info['item'] as $item) { $stock[] = (int)($skus[$item['item_code']]['stock'] / $item['item_num']); $saleStock[] = (int)($skus[$item['item_code']]['sale_stock'] / $item['item_num']); } $stock = min($stock); $saleStock = min($saleStock); $status = $saleStock ? (5 < $saleStock ? 1 : 2) : 0; $sku = GoodsSku::query()->updateOrCreate( ['external_sku_id' => $info['external_sku_id'], 'is_combination' => 1], ['title' => $info['title'], 'goods_id' => 0, 'sku_code' => $info['external_sku_id'] , 'stock' => $stock, "sale_stock" => $saleStock, 'status' => $status] ); CombinationGood::query() ->where('goods_sku_id', $sku->id) ->delete(); foreach ($info['item'] as $item) { CombinationGood::query()->create(['goods_sku_id' => $sku->id, 'item_id' => $skus[$item['item_code']]['id'], 'item_num' => $item['item_num']]); } DB::commit(); } catch (\Exception $exception) { DB::rollBack(); } } } }