13

MySQLデータベースを使用したSymfony2プロジェクトがあります。

#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を構成する必要がありますか?

4

1 に答える 1

22

Doctrineはデータベース接続ごとに1つのエンティティマネージャーを使用するため、別のレベルの構成を追加し、複数のエンティティマネージャーを使用する必要があります。構成は次のようになります。

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');

必要なエンティティマネージャーによって異なります

于 2012-07-02T10:20:40.663 に答える