Как создать товар Drupal Commerce программно

Чтобы создать товар 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); // товар

 

Категория