Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CreateTable.php
Go to the documentation of this file.
1 <?php
8 
21 
26 {
30  const OPERATION_NAME = 'create_table';
31 
35  private $dbSchemaWriter;
36 
40  private $definitionAggregator;
41 
45  private $columnTriggers;
46 
50  private $triggers;
51 
55  private $elementHistoryFactory;
56 
64  public function __construct(
65  DbSchemaWriterInterface $dbSchemaWriter,
66  DefinitionAggregator $definitionAggregator,
67  ElementHistoryFactory $elementHistoryFactory,
68  array $columnTriggers = [],
69  array $triggers = []
70  ) {
71  $this->dbSchemaWriter = $dbSchemaWriter;
72  $this->definitionAggregator = $definitionAggregator;
73  $this->columnTriggers = $columnTriggers;
74  $this->triggers = $triggers;
75  $this->elementHistoryFactory = $elementHistoryFactory;
76  }
77 
81  public function getOperationName()
82  {
83  return self::OPERATION_NAME;
84  }
85 
89  public function isOperationDestructive()
90  {
91  return false;
92  }
93 
101  private function setupColumnTriggers(array $columns, Statement $createTableStatement)
102  {
103  foreach ($columns as $column) {
104  foreach ($this->columnTriggers as $trigger) {
105  if ($trigger->isApplicable((string) $column->getOnCreate())) {
106  $elementHistory = $this->elementHistoryFactory->create([
107  'new' => $column,
108  'old' => $column
109  ]);
110  $createTableStatement->addTrigger(
111  $trigger->getCallback($elementHistory)
112  );
113  }
114  }
115  }
116  }
117 
125  private function setupTableTriggers(Table $table, Statement $createTableStatement)
126  {
127  foreach ($this->triggers as $trigger) {
128  if ($trigger->isApplicable((string) $table->getOnCreate())) {
129  $elementHistory = $this->elementHistoryFactory->create([
130  'new' => $table,
131  'old' => $table
132  ]);
133  $createTableStatement->addTrigger(
134  $trigger->getCallback($elementHistory)
135  );
136  }
137  }
138  }
139 
143  public function doOperation(ElementHistory $elementHistory)
144  {
146  $table = $elementHistory->getNew();
147  $definition = [];
148  $data = [
149  Column::TYPE => $table->getColumns(),
150  Constraint::TYPE => $table->getConstraints(),
151  Index::TYPE => $table->getIndexes()
152  ];
153 
154  foreach ($data as $type => $elements) {
158  foreach ($elements as $element) {
159  //Make definition as flat list.
160  $definition[$type . $element->getName()] = $this->definitionAggregator->toDefinition($element);
161  }
162  }
163 
164  $createTableStatement = $this->dbSchemaWriter
165  ->createTable(
166  $table->getName(),
167  $elementHistory->getNew()->getResource(),
168  $definition,
169  $table->getDiffSensitiveParams()
170  );
171 
172  $this->setupTableTriggers($table, $createTableStatement);
173  $this->setupColumnTriggers($table->getColumns(), $createTableStatement);
174 
175  return [$createTableStatement];
176  }
177 }
$columns
Definition: default.phtml:15
$type
Definition: item.phtml:13
__construct(DbSchemaWriterInterface $dbSchemaWriter, DefinitionAggregator $definitionAggregator, ElementHistoryFactory $elementHistoryFactory, array $columnTriggers=[], array $triggers=[])
Definition: CreateTable.php:64
$trigger
Definition: trigger.php:27
$table
Definition: trigger.php:14
$element
Definition: element.phtml:12