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

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

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