Вопрос по doctrine-orm, symfony, orm, php – Доктрина 2 - Конфигурирование и использование нескольких баз данных

13

У меня есть проект Symfony2 с базой данных MySQL:

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

Ваш Ответ

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

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

На самом деле перед моимanother соединение, я использовалauto_mapping: true и мне не нужно управлять какой-либо организацией изanother подключение. Я полагаю, мне придется использовать$this->get('doctrine.dbal.another_connection') и держатьentity_managers пустой Pierre de LESPINAY
@PierredeLESPINAY вы можете попробовать ... не уверен, если честно ... но дайте мне знать, если это работает так ...
Кажется, работает. Я просто держалauto_mapping: true и, кажется, все еще хорошо сопоставлены для основных данных. Pierre de LESPINAY
Вам нужен менеджер сущностей для каждого соединения, да ... если вы не собираетесь его использовать, зачем вы устанавливаете соединение?
Именно то, что я искал. Кстати, я должен определить менеджер сущностей для каждого соединения? Я буду вызывать только подпрограммы из другого соединения. Pierre de LESPINAY

Похожие вопросы