Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ConfigurableProductGenerator.php
Go to the documentation of this file.
1 <?php
8 
24 {
28  private $productGeneratorFactory;
29 
33  private $autoIncrement;
34 
39  public function __construct(
40  ProductGeneratorFactory $productGeneratorFactory,
41  AutoIncrement $autoIncrement
42  ) {
43  $this->productGeneratorFactory = $productGeneratorFactory;
44  $this->autoIncrement = $autoIncrement;
45  }
46 
54  public function generate($products, $fixtureMap)
55  {
56  $this->productGeneratorFactory->create([
57  'customTableMap' => [
58  'catalog_product_super_attribute_label' => [
59  'entity_id_field' => EntityGenerator::SKIP_ENTITY_ID_BINDING,
60  'handler' => function ($productId, $entityNumber, $fixture, $binds) {
61  foreach ($binds as &$bind) {
62  $bind['product_super_attribute_id'] = $this->generateSuperAttributeId(
63  $bind['product_super_attribute_id'],
64  $entityNumber,
65  $fixture
66  );
67  }
68  return $binds;
69  },
70  ],
71  'catalog_product_super_link' => [
72  'entity_id_field' => EntityGenerator::SKIP_ENTITY_ID_BINDING,
73  'handler' => function ($productId, $entityNumber, $fixture, $binds) {
74  foreach ($binds as &$bind) {
75  $bind['parent_id'] = $productId;
76  $bind['product_id'] = $this->generateSimpleProductId(
77  $bind['product_id'],
78  $entityNumber,
79  $fixture
80  );
81  }
82  return $binds;
83  },
84  ],
85  'catalog_product_relation' => [
86  'entity_id_field' => EntityGenerator::SKIP_ENTITY_ID_BINDING,
87  'handler' => function ($productId, $entityNumber, $fixture, $binds) {
88  foreach ($binds as &$bind) {
89  $bind['parent_id'] = $productId;
90  $bind['child_id'] = $this->generateSimpleProductId(
91  $bind['child_id'],
92  $entityNumber,
93  $fixture
94  );
95  }
96  return $binds;
97  },
98  ],
99  ]
100  ])->generate($products, $fixtureMap);
101  }
102 
111  private function generateSuperAttributeId($superAttributeId, $entityNumber, array $fixture)
112  {
113  return $superAttributeId + ($entityNumber + 1) * $fixture['_attributes_count']
114  * $this->autoIncrement->getIncrement();
115  }
116 
125  private function generateSimpleProductId($previousProductId, $entityNumber, array $fixture)
126  {
127  return $previousProductId + $entityNumber * $fixture['_variation_count'];
128  }
129 }
__construct(ProductGeneratorFactory $productGeneratorFactory, AutoIncrement $autoIncrement)