virtualOrderId = $virtualOrderId; $this->realOrderIds = $realOrderIds; } /** * */ public function handle(RealOrderRepository $realOrderRepository, VirtualOrderRepository $virtualOrderRepository) { $select = ['id', 'company_id', 'package_id']; if (!$virtualOrder = $virtualOrderRepository->select($select)->find($this->virtualOrderId)) { return ; } $realOrders = $realOrderRepository->select($select)->whereIn('id', $this->realOrderIds)->get(); if (empty($realOrders)) { return ; } $array = []; foreach ($realOrders as $value) { $k = implode(',', [$value['company_id'], $value['package_id'], $virtualOrder['company_id'], $virtualOrder['package_id']]); $array[$k] = [ 'real_company_id' => $value['company_id'], 'real_package_id' => $value['package_id'], 'virtual_company_id' => $virtualOrder['company_id'], 'virtual_package_id' => $virtualOrder['package_id'], 'counts' => 1, 'updated_at' => date('Y-m-d H:i:s'), ]; } $builder = RealVirtual::query()->toBase(); $sql = $builder->getGrammar()->compileInsert($builder, $array); $sql .= ' on conflict (real_company_id,real_package_id,virtual_company_id,virtual_package_id) do update set counts=real_virtual_relations.counts+excluded.counts, updated_at=excluded.updated_at'; $builder->connection->insert($sql, Arr::flatten($array, 1)); } }