2014-09-05 57 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" 

雙方將循環使用您的所有遷移文件,但那些別不適用於這種情況將被忽略。

相關問題