Symfony2 - 可以学说:迁移:diff创建DB不可知代码而不是SQL吗?

时间:2012-07-23 16:44:34

标签: symfony doctrine-orm doctrine-migrations

运行php app/console doctrine:migrations:diff会根据需要生成新的迁移类,以将当前数据库模式转换为实体更改所指定的模式。

此示例显示了用于创建fos_user表的生成类:

class Version20120712145445 extends AbstractMigration
{
    public function up(Schema $schema)
    {
        $this->abortIf($this->connection->getDatabasePlatform()->getName() != "mysql");        
        $this->addSql("CREATE TABLE fos_user (id INT AUTO_INCREMENT NOT NULL, ...);
    }

    public function down(Schema $schema)
    {
        $this->abortIf($this->connection->getDatabasePlatform()->getName() != "mysql");        
        $this->addSql("DROP TABLE fos_user");
    }
}

正如您所看到的,生成的迁移与特定的数据库服务器相关联,在此实例中是MySQL。

我希望在测试环境中使用内存中的sqlite数据库,因为(预期)性能优势可以缩短测试执行时间。

我可以使用上面生成的SQL并将其转换为$table = $schema->createTable(); $table->addColumn();等价物,但这样做既费时又引起错误,因为人工将SQL转换为代码很差。

doctrine:migrations:diff命令可以创建与平台无关的迁移代码而不是上面特定于平台的SQL吗?

2 个答案:

答案 0 :(得分:3)

不,当前版本无法做到这一点。如果您需要与数据库无关的迁移,则应该查看LiquiBase以进行迁移。 LiquiBase也有一个Symfony2 Bundle LiquibaseBundle

答案 1 :(得分:2)

目前,不支持其他数据库迁移工具,但他们计划支持某些数据库管理工具

请参阅doctrine: DBAL-602此票证是LiquiBase,DBDeploy和phinx支持理论迁移的功能请求