53 $this->diffManager = $diffManager;
64 private function excludeAutoIndexes(
Table $table, array $indexes)
85 private function turnOffForeignKeys(
Table $declaredTable,
Table $generatedTable, Diff $diff)
89 foreach (
$changes as $elementHistory) {
91 if ($elementHistory->getNew() instanceof Column) {
92 $column = $elementHistory->getNew();
93 $references = $generatedTable->getReferenceConstraints();
94 $declaredReferences = $this->getElementsListByNameWithoutPrefix(
95 $declaredTable->getReferenceConstraints()
98 foreach ($references as $reference) {
100 if ($reference->getColumn()->getName() === $column->getName() &&
101 isset($declaredReferences[$reference->getNameWithoutPrefix()])
108 $diff = $this->diffManager->registerRemoval($diff, [$reference]);
109 $diff = $this->diffManager
112 $declaredReferences[$reference->getNameWithoutPrefix()]
128 private function getElementsListByNameWithoutPrefix(array $elements)
135 return $elementsList;
151 if ($declaredTable->getResource() !== $generatedTable->getResource()) {
152 $this->diffManager->registerRecreation($declaredTable, $generatedTable, $diff);
156 if ($this->diffManager->shouldBeModified($declaredTable, $generatedTable)) {
157 $this->diffManager->registerTableModification($declaredTable, $generatedTable, $diff);
160 return $this->calculateDiff($declaredTable, $generatedTable, $diff);
175 foreach ($types as $elementType) {
176 $generatedElements = $generatedTable->getElementsByType($elementType);
177 $declaredElements = $declaredTable->getElementsByType($elementType);
179 if ($elementType === self::INDEX_DIFF_TYPE) {
180 $generatedElements = $this->excludeAutoIndexes($generatedTable, $generatedElements);
181 $declaredElements = $this->excludeAutoIndexes($declaredTable, $declaredElements);
184 if (in_array($elementType, [self::CONSTRAINT_DIFF_TYPE, self::INDEX_DIFF_TYPE],
true)) {
185 $generatedElements = $this->getElementsListByNameWithoutPrefix($generatedElements);
186 $declaredElements = $this->getElementsListByNameWithoutPrefix($declaredElements);
192 $diff = $this->diffManager->registerCreation($diff,
$element);
193 }
elseif ($this->diffManager->shouldBeModified(
197 $diff = $this->diffManager
206 if ($this->diffManager->shouldBeRemoved($generatedElements)) {
207 $diff = $this->diffManager->registerRemoval($diff, $generatedElements);
211 $diff = $this->turnOffForeignKeys($declaredTable, $generatedTable, $diff);
elseif(isset( $params[ 'redirect_parent']))
diff(ElementInterface $declaredTable, ElementInterface $generatedTable, Diff $diff)
const CONSTRAINT_DIFF_TYPE
__construct(DiffManager $diffManager)