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

vkc1a9a2  于 2022-11-16  发布在  其他
关注(0)|答案(3)|浏览(152)

如果我已经使用迁移,我可以使用以下方法轻松生成增量迁移:app/console doctrine:migrations:diff .
但是假设我有一个现有的应用程序,它还没有使用迁移。doctrine:migrations:diff只会在当前的数据库模式和原则实体之间生成一个diff。问题是我需要有一个初始/第一次迁移,其中包含到目前为止创建的每个实体的CREATE TABLE。我目前的解决方法是创建一个空数据库,在parameters.yml中切换凭据,然后运行doctrine:migrations:diff
我不喜欢这个解决方案-有更好的吗?

bfnvny8b

bfnvny8b1#

您可以使用doctrine:schema:create --dump-sql来生成用于创建的sql,并将其放入第一个迁移版本中
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/tools.html#database-schema-generation

puruo6ea

puruo6ea2#

如果表不作为Doctrine实体存在,则需要手动为其创建一个迁移类,以及任何单独的Fixture。

<?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配置中的过滤器排除这些自定义表(@请参见:http://symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html#manual-tables)
在本例中,将t_替换为MY_CUSTOM_PREFIX_

fquxozlt

fquxozlt3#

还有一点:

bin/console doctrine:migrations:diff --from-empty-schema

使用标志**--from-empty-schema**,它将执行您所要求的操作。
之后,如果数据库已经设置好了,你可以(必须)在doctrine_migration_versions表中手动添加一个条目,然后你想(必须)运行/bin/console doctrine:migrations:migrate

相关问题