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);
}

Я что-то пропустил?

0 ответов

Другие вопросы по тегам