如何为现有Symfony + Doctrine应用程序生成初始/基本迁移?

时间:2017-05-25 12:24:45

标签: symfony doctrine-orm doctrine

如果我已经使用了迁移,我可以使用以下方法轻松生成增量迁移: app/console doctrine:migrations:diff

但假设我有一个尚未使用迁移的现有应用程序。 doctrine:migrations:diff只会在当前数据库模式和doctrine实体之间生成差异。问题是我需要为到目前为止创建的每个实体都有CREATE TABLE的初始/第一次迁移。我目前的解决方法是创建一个空数据库,在parameters.yml中切换凭据,然后运行doctrine:migrations:diff

我不喜欢这个解决方案 - 有更好的解决方案吗?

2 个答案:

答案 0 :(得分:4)

您可以使用doctrine:schema:create --dump-sql来生成用于创建的sql并将其放入第一个迁移版本

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/tools.html#database-schema-generation

答案 1 :(得分:1)

如果该表不作为Doctrine Entity存在,您需要手动为其创建迁移类,以及任何单独的Fixtures。

<?php

namespace DoctrineMigrations;

use DoctrineDBALMigrationsAbstractMigration,
DoctrineDBALSchemaSchema;

class Version00001 extends AbstractMigration
{
    public function up(Schema $schema)
    {
        $this->addSql('CREATE TABLE MY_CUSTOM_PREFIX_example (id INT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB');
    }

    public function down(Schema $schema)
    {
        $this->addSql('DROP TABLE MY_CUSTOM_PREFIX_example');
    }
}

还要确保使用Doctrine配置中的过滤器排除这些自定义表(@see:http://symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html#manual-tables

对于此示例,您将t_替换为MY_CUSTOM_PREFIX_