resourceConnection->getConnection(); $writtenGroups = 0; $writtenStoreViews = 0; $connection->beginTransaction(); try { foreach ($groups as $group) { $value = $this->json->serialize($delete ? [] : $group['rules']); foreach ($group['store_ids'] as $storeId) { $this->productAction->updateAttributes( [(int)$group['product_id']], [AddMixStepPricesAttribute::ATTRIBUTE_CODE => $value], (int)$storeId ); $writtenStoreViews++; } $writtenGroups++; } $connection->commit(); $productIds = array_unique(array_map( static fn(array $group): int => (int)$group['product_id'], $groups )); $this->cache->clean(array_map( static fn(int $productId): string => Product::CACHE_TAG . '_' . $productId, $productIds )); } catch (\Throwable $exception) { $connection->rollBack(); throw $exception; } return ['groups' => $writtenGroups, 'store_views' => $writtenStoreViews]; } }