@@ -303,30 +303,31 @@ public function addChangedForeignKey(ForeignKey $changedForeignKey)
303303 */
304304 public function generateAlterScript ()
305305 {
306+ $ tableDrops = [];
306307 $ tableChanges = [];
307308
308309 if ($ this ->deletedPrimaryKey || (!empty ($ this ->fromTable ->getPrimaryKeys ()) && !empty ($ this ->changedPrimaryKeys ))) {
309- $ tableChanges [] = 'DROP PRIMARY KEY ' ;
310+ $ tableDrops [] = 'DROP PRIMARY KEY ' ;
310311 }
311312
312313 foreach ($ this ->deletedForeignKeys as $ deletedForeignKey ) {
313- $ tableChanges [] = sprintf ('DROP FOREIGN KEY `%s` ' , $ deletedForeignKey ->getName ());
314+ $ tableDrops [] = sprintf ('DROP FOREIGN KEY `%s` ' , $ deletedForeignKey ->getName ());
314315 }
315316
316317 foreach ($ this ->changedForeignKeys as $ changedForeignKey ) {
317- $ tableChanges [] = sprintf ('DROP FOREIGN KEY `%s` ' , $ changedForeignKey ->getName ());
318+ $ tableDrops [] = sprintf ('DROP FOREIGN KEY `%s` ' , $ changedForeignKey ->getName ());
318319 }
319320
320321 foreach ($ this ->deletedIndexes as $ deletedIndex ) {
321- $ tableChanges [] = sprintf ('DROP INDEX `%s` ' , $ deletedIndex ->getName ());
322+ $ tableDrops [] = sprintf ('DROP INDEX `%s` ' , $ deletedIndex ->getName ());
322323 }
323324
324325 foreach ($ this ->changedIndexes as $ changedIndex ) {
325- $ tableChanges [] = sprintf ('DROP INDEX `%s` ' , $ changedIndex ->getName ());
326+ $ tableDrops [] = sprintf ('DROP INDEX `%s` ' , $ changedIndex ->getName ());
326327 }
327328
328329 foreach ($ this ->deletedColumns as $ deletedColumn ) {
329- $ tableChanges [] = sprintf ('DROP COLUMN `%s` ' , $ deletedColumn ->getName ());
330+ $ tableDrops [] = sprintf ('DROP COLUMN `%s` ' , $ deletedColumn ->getName ());
330331 }
331332
332333 $ columnStatements = [];
@@ -390,9 +391,17 @@ public function generateAlterScript()
390391 $ tableChanges [] = sprintf ('COMMENT= \'%s \'' , str_replace ('\'' , '\'\'' , $ this ->toTable ->getComment ()));
391392 }
392393
393- $ alterScript = sprintf ( ' ALTER TABLE `%s`%s %s; ' , $ this -> getName (), PHP_EOL , implode ( ' , ' . PHP_EOL . ' ' , $ tableChanges )) ;
394+ $ alterScripts = [] ;
394395
395- return $ alterScript ;
396+ if (!empty ($ tableDrops )) {
397+ $ alterScripts [] = sprintf ('ALTER TABLE `%s`%s %s; ' , $ this ->getName (), PHP_EOL , implode (', ' . PHP_EOL . ' ' , $ tableDrops ));
398+ }
399+
400+ if (!empty ($ tableChanges )) {
401+ $ alterScripts [] = sprintf ('ALTER TABLE `%s`%s %s; ' , $ this ->getName (), PHP_EOL , implode (', ' . PHP_EOL . ' ' , $ tableChanges ));
402+ }
403+
404+ return implode (PHP_EOL , $ alterScripts );
396405 }
397406
398407 /**
0 commit comments