24 private $optionRepository;
29 private $resourceModel;
42 $this->optionRepository = $optionRepository;
63 $this->deleteConfigurableProductAttributes(
$entity);
72 if ($configurableLinks !==
null) {
73 $configurableLinks = (array)$configurableLinks;
74 $this->resourceModel->saveProducts(
$entity, $configurableLinks);
90 $existingAttributeIds = [];
91 foreach ($this->optionRepository->getList(
$product->getSku()) as
$option) {
96 if (!in_array(
$attribute->getAttributeId(), array_keys($existingAttributeIds))
113 private function deleteConfigurableProductAttributes(ProductInterface
$product): void
115 $newAttributeIds = [];
116 foreach (
$product->getExtensionAttributes()->getConfigurableProductOptions() as
$option) {
119 foreach ($this->optionRepository->getList(
$product->getSku()) as
$option) {
120 if (!in_array(
$option->getAttributeId(), array_keys($newAttributeIds))
121 || $this->isOptionChanged(
$option, $newAttributeIds[
$option->getAttributeId()])
123 $this->optionRepository->deleteById(
$product->getSku(),
$option->getId());
135 private function isOptionChanged(OptionInterface
$option, Attribute
$attribute): bool
__construct(ResourceModelConfigurable $resourceModel, OptionRepositoryInterface $optionRepository)
execute($entity, $arguments=[])