Symfony2 doctrine:schema:使用多个实体管理器进行更新

时间:2014-09-05 17:18:48

标签: symfony

我在config.yml中有两个数据库连接和两个实体管理器。每个都捆绑在一起。

我遇到的问题是运行单元测试,首先是创建一个空白数据库并加载数据。它创建了两个数据库,但我在每个数据库中都获得了两组表,而不是一个数据库中的一组实体和另一个数据库中的一组实体。由于两个数据库连接并不常见,因此我无法找到一些帮助。

doctrine:
    dbal:
        default_connection: default
 ...
    connections:
         default:
         (conectioninfo)
         seconddb:
         (connectioninfo)


 orm:
    default_entity_manager: default
    auto_generate_proxy_classes: "%kernel.debug%"
    entity_managers:
    default:
        connection: default
        mappings:
           MycompanyCoreBundle: ~
    seconddb:
        connection: seconddb
        mappings:
           MycomanySecondBundle: ~

运行单元测试时,我的行是:

php app/console doctrine:database:drop --force --env=test --connection=default 
php app/console doctrine:database:create --env=test --connection=default
php app/console doctrine:schema:drop --force --no-interaction --env=test --em=default
php app/console doctrine:schema:update --force --no-interaction --env=test --em=default

php app/console doctrine:database:drop --force --env=test --connection=seconddb
php app/console doctrine:database:create --env=test --connection=seconddb
php app/console doctrine:schema:drop --force --no-interaction --env=test --em=seconddb
php app/console doctrine:schema:update --force --no-interaction --env=test --em=seconddb

运行所有这些时,输出为

Successfully deleted cache entries.
Dropping database schema...
Database schema dropped successfully!
Updating database schema...
Database schema updated successfully! "91" queries were executed

问题是这91个查询是两个包中的两个实体文件夹的组合。我错过了某个地方将它们分开指出,以便它们进入各自的数据库。

1 个答案:

答案 0 :(得分:1)

我最终找到了答案。没有办法为迁移指定数据库,因此您基本上必须在EM上运行两次迁移,然后测试数据库连接。

在每个迁移文件中,如果它不正确,您可以放入一行来忽略它。因此,有些文件有

$this->skipIf( $this->connection->getDatabase() != 'dbone', 'Skipping database.' );

和其他人

$this->skipIf( $this->connection->getDatabase() != 'dbtwo', 'Skipping database.' );

然后当你运行这些命令时:

doctrine:migrations:migrate --em="default"
doctrine:migrations:migrate --em="orm"

两者都将遍历所有迁移文件,但不适用于该情况的文件将被忽略。