/** * {@inheritdoc} */ public function synchronizeVariationsCategories(ProductInterface $product, ArrayCollection $variations = null) { if (in_array('productCategories', $this->getVariationFields())) { return; } if (!$variations) { $variations = $product->getVariations(); } $productCategories = $product->getProductCategories(); /** @var ProductInterface $variation */ foreach ($variations as $variation) { // browsing variation categories and remove excessing categories foreach ($variation->getCategories() as $variationCategory) { if ($variationCategory && !$productCategories->contains($variationCategory)) { $this->productCategoryManager->removeCategoryFromProduct($variation, $variationCategory); } } // browsing Product categories and add missing categories foreach ($productCategories as $productCategory) { $category = $productCategory->getCategory(); if ($category && !$variation->getCategories()->contains($category)) { $this->productCategoryManager->addCategoryToProduct($variation, $category, $productCategory->getMain()); } } } }