Dumplie\Metadata\Infrastructure\Doctrine\Dbal\DoctrineStorage::alter PHP Method

alter() public method

public alter ( Schema $schema )
$schema Dumplie\Metadata\Schema
    public function alter(Schema $schema)
    {
        $currentSchema = $this->connection->getSchemaManager()->createSchema();
        $targetSchema = clone $currentSchema;
        foreach ($schema->types() as $type) {
            $tableName = $this->tableName($schema->name(), $type->name());
            if ($targetSchema->hasTable($tableName)) {
                $targetSchema->dropTable($tableName);
            }
            $this->createTable($targetSchema, $schema->name(), $type);
        }
        $queries = $currentSchema->getMigrateToSql($targetSchema, $this->connection->getDatabasePlatform());
        $this->executeQueries($queries);
    }

Usage Example

Example #1
0
 public function test_alter_non_existing_table()
 {
     $this->storage->alter($this->schema);
     $result = $this->connection->getSchemaManager()->listTableColumns('metadata_test_foo');
     $this->assertEquals(['id', 'text'], array_keys($result));
 }