【问题标题】:How do I generate an initial/base migration for existing Symfony+Doctrine application?如何为现有 Symfony+Doctrine 应用程序生成初始/基本迁移?
【发布时间】:2017-05-25 12:24:45
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么不创建一个初始 SQL,它将在第一次迁移中运行,表 CREATIONS 没有 INSERTS?

标签: symfony doctrine-orm doctrine


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果表不作为 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_

    【讨论】:

    • @siergiej 如果帮助指导其他人遵循相同的方式,请投票有效
    猜你喜欢
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 2018-08-01
    相关资源
    最近更新 更多