Details
-
Type:
Bug
-
Status:
Open
-
Priority:
Major
-
Resolution: Unresolved
-
Labels:None
Description
When iterating migration versions, a call to SchemaManager::createSchema() is done for every versions. Four our schema, this call take about 1 second to execute. With already 30 migrations, this begin to be a problem.
$versions = $configuration->registerMigrationsFromDirectory($this->_migration_folder); foreach($versions as $version){ if(!$version->isMigrated()){ $version->markMigrated(); } }
The problem is in Migrations\Configuration\Configuration::createMigrationTable() which does not set the migrationTableCreated flag when the table already exists.
public function createMigrationTable() { $this->validate(); if ($this->migrationTableCreated) { return false; } $schema = $this->connection->getSchemaManager()->createSchema(); if ( ! $schema->hasTable($this->migrationsTableName)) { $columns = array( 'version' => new Column('version', Type::getType('string'), array('length' => 14)), ); $table = new Table($this->migrationsTableName, $columns); $table->setPrimaryKey(array('version')); $this->connection->getSchemaManager()->createTable($table); $this->migrationTableCreated = true; return true; } return false; }