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 回答