我在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个查询是两个捆绑包中两个实体文件夹的组合。我缺少一个可以分别指出它们的地方,以便它们进入各自的数据库。
我最终找到了答案。没有办法为迁移指定数据库,所以基本上必须在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"
两者都将在所有迁移文件中循环,但不适用于这种情况的文件将被忽略。