Symfony2 - 更改迁移目录

时间:2013-06-12 13:21:32

标签: symfony doctrine migration bundle

如何更改config.yml中的默认迁移目录? 现在我使用2个不同数据库连接的捆绑包,我想创建迁移文件并将它们存储在不同的目录中以使用该原则:迁移:migrate --em =捆绑包依赖性中的任何函数。

例如:

doctrine:migrate:diff --em=whatever #creating a version file in the DoctrineMigrationsWhatever directory

php app/console doctrine:migrations:status --em=whatever # shows only the version files, that belong to the bundle

3 个答案:

答案 0 :(得分:12)

如果您要为第二个连接/包创建单独的实体管理器,您将在DoctrineMigrations目录中获得另一个目录。例如:

app/
    DoctrineMigrations/
        entityManager1/
        entityManager2/

如果要将所有迁移放到另一个目录中,可以在config.yml中设置它:

doctrine_migrations:
    dir_name: '%kernel.root_dir%/../Acme/CommonBundle/DoctrineMigrations'
    namespace: 'Acme\CommonBundle\DoctrineMigrations'

如果你想要一些更复杂的东西,比如将bundle中的em1迁移到dir1,并将bundle2中的em2迁移到dir2,你需要另外两个配置文件,你可以为特定的bundle指定dirs:

http://docs.doctrine-project.org/projects/doctrine-migrations/en/latest/reference/introduction.html#configuration

然后你运行这样的迁移:

doctrine:migrations:status --em=em1 --configuration=./path/to/bundle1/Resources/config/migrations.yml
doctrine:migrations:status --em=em2 --configuration=./path/to/bundle2/Resources/config/migrations.yml

https://github.com/doctrine/DoctrineMigrationsBundle/pull/46
migrations.yml文件应如下所示:

name: Doctrine Postgres Migrations  
migrations_namespace: Application\Migrations  
table_name: migration_versions  
migrations_directory: PostgreSqlMigrations  

答案 1 :(得分:5)

对于发现此页面并花费数小时试图实施Cyprian解决方案的其他人,它不起作用。

首先,--configuration遭到破坏,其次,学说迁移捆绑包不支持多个实体经理。

有关--configuration的信息,请参阅https://github.com/doctrine/DoctrineMigrationsBundle/issues/18,有关支持多个实体经理的公开拉取请求,请参阅https://github.com/doctrine/DoctrineMigrationsBundle/pull/46

如果PR#46通过,这将是一个简单的配置:

doctrine_migrations:
  default:
    dir_name: ...
    namespace: ...
  em2:
    dir_name: ...
    namespace: ...

目前唯一可用的调整是:

doctrine_migrations:
    dir_name: '%kernel.root_dir%/../Acme/CommonBundle/DoctrineMigrations'
    namespace: 'Acme\CommonBundle\DoctrineMigrations'

但是,这将更新所有实体管理器中所有迁移的配置。

答案 2 :(得分:0)

对于Symfony 4,推荐的方法是改用%kernel.project_dir%,并将其放在src/命名的App\文件夹中:

doctrine_migrations:
    dir_name: '%kernel.project_dir%/src/DoctrineMigrations'
    namespace: 'App\DoctrineMigrations'