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