Чтобы создать товар Drupal Commerce программно нужно сначала создать Product Variation (вариант) товара, а уже затем полученный объект варианта привязать к товару. Делается эта процедура в 2 этапа.
Как создать вариант товара:
$variation = \Drupal\commerce_product\Entity\ProductVariation::create([
'type' => 'default', // тип product variation, по умолчанию default
'sku' => 'test-product-01', // артикул вариант, должен быть уникальным
'status' => TRUE, // статус варианта
'price' => new \Drupal\commerce_price\Price('24.99', 'USD'), // стоимость
]);
$variation->save(); // сохраняем
Если нужно создать вариант с атрибутами
$color = \Drupal\commerce_product\Entity\ProductAttributeValue::create([
'attribute' => 'color',
'name' => 'Red',
]);
$color->save();
$size = \Drupal\commerce_product\Entity\ProductAttributeValue::create([
'attribute' => 'size',
'name' => 'Medium',
]);
$size->save();
$variation = \Drupal\commerce_product\Entity\ProductVariation::create([
'type' => 'default',
'sku' => '001',
'price' => new \Drupal\commerce_price\Price('10.00', 'USD'),
'attribute_color' => $color,
'attribute_size' => $size,
])->save();
Как создать товар:
$product = \Drupal\commerce_product\Entity\Product::create([
'uid' => 1, // user id автора
'type' => 'default', // тип товара, по умолчанию default
'title' => t('Your Product Name'), // заголовок товара
'stores' => [$store], // машинное имя магазина commerce, массив
'variations' => [$variation], // массив объектов вариантов товара
]);
$product->save(); // сохраняем
Также можно добавить вариант к товару используя специальный метод:
$product->addVariation($variation);
$product->save();
Когда вы добавите вариант к товару, то автоматически будет создана обратная связь товара к варианту:
$variation->getProduct(); // вернет товары, к которым привязан этот вариант
Как загрузить товар:
$red = \Drupal\commerce_product\Entity\ProductAttributeValue::load(1); // атрибут
$variation = \Drupal\commerce_product\Entity\ProductVariation::load(1); // вариант товара
$product = \Drupal\commerce_product\Entity\Product::load(1); // товар
Категория