运行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吗?
答案 0 :(得分:3)
不,当前版本无法做到这一点。如果您需要与数据库无关的迁移,则应该查看LiquiBase以进行迁移。 LiquiBase也有一个Symfony2 Bundle LiquibaseBundle
答案 1 :(得分:2)
目前,不支持其他数据库迁移工具,但他们计划支持某些数据库管理工具
请参阅doctrine: DBAL-602此票证是LiquiBase,DBDeploy和phinx支持理论迁移的功能请求