2014-09-05 106 views
3

我在config.yml和两个实体管理器中有两个数据库连接。每个都捆绑在一起。Symfony2原则:架构:使用多个实体管理器更新

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

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个查询是一个组合两个实体文件夹中的两个包。我错过了一个地方分别指出他们,所以他们进入他们各自的数据库。

+0

可能不会帮助,但用一个模式替换架构drop/update:create。 – Cerad 2014-09-05 18:19:26

+1

连接:流应该连接:seconddb? – Cerad 2014-09-05 18:22:28

+0

是的,它是seconddb。我上面的例子是从真实代码中截取的,我正在改变一些名字。 schema:create确实保存了两个步骤但结果相同,所有表都混合并放入两个数据库中。 – 2014-09-07 00:28:10

回答

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" 

双方将循环使用您的所有迁移文件,但那些别不适用于这种情况将被忽略。