/** * Save attributes for configurable product * * @param ProductInterface $product * @param array $attributes * @return array */ private function saveConfigurableProductAttributes(ProductInterface $product, array $attributes) { $ids = []; /** @var \Magento\ConfigurableProduct\Model\Product\Type\Configurable\Attribute $attribute */ foreach ($attributes as $attribute) { $attribute->setId(null); $ids[] = $this->optionRepository->save($product->getSku(), $attribute); } return $ids; }
/** * @param \Magento\Catalog\Api\Data\ProductInterface $product * @param \Magento\ConfigurableProduct\Api\Data\OptionInterface[] $options * @return $this */ protected function saveConfigurableProductOptions(\Magento\Catalog\Api\Data\ProductInterface $product, array $options) { $existingOptionIds = []; if ($product->getExtensionAttributes() !== null) { $extensionAttributes = $product->getExtensionAttributes(); if ($extensionAttributes->getConfigurableProductOptions() !== null) { $existingOptions = $extensionAttributes->getConfigurableProductOptions(); foreach ($existingOptions as $option) { $existingOptionIds[] = $option->getId(); } } } $updatedOptionIds = []; foreach ($options as $option) { if ($option->getId()) { $updatedOptionIds[] = $option->getId(); } $this->optionRepository->save($product->getSku(), $option); } $optionIdsToDelete = array_diff($existingOptionIds, $updatedOptionIds); foreach ($optionIdsToDelete as $optionId) { $this->optionRepository->deleteById($product->getSku(), $optionId); } return $this; }
/** * Save attributes for configurable product * * @param ProductInterface $product * @param array $attributes * @return array */ private function saveConfigurableProductAttributes(ProductInterface $product, array $attributes) { $ids = []; /** @var \Magento\ConfigurableProduct\Model\Product\Type\Configurable\Attribute $attribute */ foreach ($attributes as $attribute) { $eavAttribute = $this->productAttributeRepository->get($attribute->getAttributeId()); $data = $attribute->getData(); $attribute->loadByProductAndAttribute($product, $eavAttribute); $attribute->setData(array_replace_recursive($attribute->getData(), $data)); $ids[] = $this->optionRepository->save($product->getSku(), $attribute); } return $ids; }