Symfony2 - 更改迁移目录

Tom*_*uer 4 migration doctrine bundle symfony

如何更改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
Run Code Online (Sandbox Code Playgroud)

Cyp*_*ian 12

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

app/
    DoctrineMigrations/
        entityManager1/
        entityManager2/
Run Code Online (Sandbox Code Playgroud)

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

doctrine_migrations:
    dir_name: '%kernel.root_dir%/../Acme/CommonBundle/DoctrineMigrations'
    namespace: 'Acme\CommonBundle\DoctrineMigrations'
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

name: Doctrine Postgres Migrations  
migrations_namespace: Application\Migrations  
table_name: migration_versions  
migrations_directory: PostgreSqlMigrations  
Run Code Online (Sandbox Code Playgroud)


Nat*_*ate 5

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

首先,--configuration遭到破坏,其次,doctrine迁移包不支持多个实体管理器.

https://github.com/doctrine/DoctrineMigrationsBundle/issues/18有关信息--configuration,看看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'

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

  • 为了避免任何混乱和浪费时间,PR46永远不会被接受.因此,在`doctrine_migrations`配置项下不可能有多个实体管理器. (2认同)