Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SchemaDiff.php
Go to the documentation of this file.
1 <?php
8 
11 
21 {
25  private $tableDiff;
26 
30  private $diffManager;
31 
35  private $diffFactory;
36 
40  private $operationsExecutor;
41 
50  public function __construct(
51  DiffManager $diffManager,
52  TableDiff $tableDiff,
53  DiffFactory $diffFactory,
54  OperationsExecutor $operationsExecutor
55  ) {
56  $this->tableDiff = $tableDiff;
57  $this->diffManager = $diffManager;
58  $this->diffFactory = $diffFactory;
59  $this->operationsExecutor = $operationsExecutor;
60  }
61 
71  private function createTableIndex(array $tableNames, array $generatedTableNames)
72  {
73  foreach ($generatedTableNames as $tableName) {
74  //If table exists only in db
75  if (!in_array($tableName, $tableNames)) {
76  $tableNames[] = $tableName;
77  }
78  }
79 
80  return array_flip($tableNames);
81  }
82 
90  public function diff(
92  Schema $generatedSchema
93  ) {
94  $generatedTables = $generatedSchema->getTables();
95  $tableNames = array_keys($schema->getTables());
96  $generatedTableNames = array_keys($generatedSchema->getTables());
97 
98  $diff = $this->diffFactory->create(
99  [
100  'tableIndexes' => $this->createTableIndex($tableNames, $generatedTableNames),
101  'destructiveOperations' => $this->operationsExecutor->getDestructiveOperations()
102  ]
103  );
104 
105  foreach ($schema->getTables() as $name => $table) {
106  if ($this->diffManager->shouldBeCreated($generatedTables, $table)) {
107  $diff = $this->diffManager->registerCreation($diff, $table);
108  } else {
109  $diff = $this->tableDiff->diff($table, $generatedTables[$name], $diff);
110  }
111 
112  unset($generatedTables[$name]);
113  }
114  //Removal process
115  if ($this->diffManager->shouldBeRemoved($generatedTables)) {
116  $diff = $this->diffManager->registerRemoval($diff, $generatedTables);
117  }
118 
119  return $diff;
120  }
121 }
$tableName
Definition: trigger.php:13
diff(Schema $schema, Schema $generatedSchema)
Definition: SchemaDiff.php:90
__construct(DiffManager $diffManager, TableDiff $tableDiff, DiffFactory $diffFactory, OperationsExecutor $operationsExecutor)
Definition: SchemaDiff.php:50
$table
Definition: trigger.php:14
if(!isset($_GET['name'])) $name
Definition: log.php:14