Подтвердить что ты не робот

Doctrine 2 - настройка и использование нескольких баз данных

У меня есть проект Symfony2 с MySQL db:

#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 для каждого соединения?

4b9b3361

Ответ 1

Вам нужно добавить еще один уровень конфигурации, а также использовать несколько менеджеров сущностей, поскольку 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');

в зависимости от того, какой менеджер объектов вам нужен