Magento 2: проблема программного создания настраиваемых продуктов
Я создал configurable product
и 2 simple products
программно. simple products
есть разные color
ценности.
$color1 = "black";
$color2 = "white";
$attr = $product->getResource()->getAttribute('color');
$value1 = $attr->getSource()->getOptionId($color1);
$value2 = $attr->getSource()->getOptionId($color2);
$simpleProduct1->setData('color', $value1);
$simpleProduct2->setData('color', $value2);
Я пытаюсь установить эти simple products
как configurations
из configurable product
по телефону:
$variantIds = [$simpleProduct1->getId(), $simpleProduct2->getId()];
$configurableProduct->setAssociatedProductIds($variantIds);
Когда я запускаю код, я получаю сообщение об ошибке:
"Products "1665" and "1664" have the same set of attribute values."
Если я пойду в admin
и вручную создать новый configuration
для color attribute
и установите это brown
, затем повторно запустите мой код, он будет правильно связать мой black
а также white
конфигурации и удалить product-brown
от configuration list
,
Вместо создания color configuration
,
Если я пойду в admin
и вручную создать новый configuration
для size attribute
, а затем повторно запустить мой код, я получаю ту же ошибку, что и раньше.
Кажется, я должен enable
configuration
за color
прежде чем я смогу добавить продукты, которые отличаются color attribute
,
Могу ли я сделать это программно? Есть ли что-то, что мне нужно установить на configurable product
перед добавлением associated products
?
Вот значения, которые я устанавливаю при создании нового products
$product = $this->productFactory->create();
$product->setSku($sku);
$product->setName($name);
$product->setStatus(1);
$product->setAttributeSetId(4);
$product->setPrice(0);
if($isConfigurable){
$product->setTypeId("configurable");
} else {
$product->setTypeId("simple");
$product->setVisibility(1);
$colorAttr = $product->getResource()->getAttribute('color');
$colorValue = $colorAttr->getSource()->getOptionId($color);
$product->setData('color', $colorValue);
}
Я что-то пропустил?