2012-07-02 11 views
13

を使用し、私は、MySQL DBでSymfony2のプロジェクトがあります。ドクトリン2 - 複数のデータベースの構成と

#app/config/config.yml 
doctrine: 
    dbal: 
     driver: %database_driver% # < 
     host:  %database_host%  # | 
     port:  %database_port%  # | Defined in 
     dbname: %database_name%  # | parameters.ini 
     user:  %database_user%  # | 
     password: %database_password% # < 

    orm: 
     auto_generate_proxy_classes: %kernel.debug% 
     auto_mapping: true 

今、私は、他のデータベースに(ルーチン呼び出しのような)単純なクエリを作成したいのですが。

他のdbalを設定ファイルに定義する必要がありますか?
「はい」の場合は、プロジェクトのデフォルト接続を維持したままどのように設定できますか?
接続ごとにormを構成する必要がありますか。

あなたが設定の別のレベルを追加しても、Doctrineがデータベース接続ごとに1つのエンティティマネージャを使用するよう multiple entity managersを使用する必要が

答えて

22

構成がこのようなものに見えるかもしれません..:

doctrine: 
    dbal: 
     connections: 
     default: 
      driver: %database_driver% # < 
      host:  %database_host%  # | 
      port:  %database_port%  # | Defined in 
      dbname: %database_name%  # | parameters.ini 
      user:  %database_user%  # | 
      password: %database_password% # < 
     another: 
      driver: %database2_driver% # < 
      host:  %database2_host%  # | 
      port:  %database2_port%  # | Defined in 
      dbname: %database2_name%  # | parameters.ini 
      user:  %database2_user%  # | 
      password: %database2_password% # < 

を次に、あなたとあなたの複数のエンティティマネージャを定義しますそう

doctrine: 
    orm: 
     default_entity_manager: default 
     entity_managers: 
      default: 
       connection:  default 
       mappings: 
        AcmeDemoBundle: ~ 
        AcmeStoreBundle: ~ 
      another: 
       connection:  another 
       mappings: 
        AcmeCustomerBundle: ~ 

、あなたのアクションで、あなたは正しいエンティティマネージャを取得するには、以下を使用することができます。

$em = $this->get('doctrine')->getEntityManager('default'); 
$em = $this->get('doctrine')->getEntityManager('another'); 

あなたが必要とするエンティティマネージャに応じて

+0

まさに私が探していたものです。 BTWは、各接続にエンティティマネージャを定義する必要がありますか?私は、他の接続からルーチンを呼び出すだけです。 –

+0

接続ごとにエンティティマネージャが必要です。はい。使用しない場合は、なぜ接続を設定していますか? – ManseUK

+0

実際には私の 'another'接続の前に' auto_mapping:true'を使っていましたが、 'another'接続からのエンティティを管理する必要はありません。私は '$ this-> get( 'doctrine.dbal.another_connection')'を使用し、 'entity_managers'を空にしておく必要があると思います。 –

関連する問題