Как бороться с соединениями Mongodb с помощью DoctrineMongoDBBundle?
Я работаю над проектом Symfony 2, использующим DoctrineMongoDBBundle для управления данными. Мне нужно иметь дело с двумя или более экземплярами, но я не нашел никакой помощи для настройки.
В документации объясняется, как настроить одно соединение по умолчанию, добавив следующий код в файл config.yml.
doctrine_mongodb:
connections:
default:
server: mongodb://localhost:27017
options: {}
default_database: test_database
document_managers:
default:
auto_mapping: true
И для вызова менеджера документов я использовал этот код:
$dm = $this->get('doctrine_mongodb')->getManager();
Это работает хорошо, но я не могу найти, как настроить больше соединений и как работать с помощью диспетчера документов. Я думаю, что это должно выглядеть следующим образом, но я не могу найти, как вызвать конкретное соединение.
doctrine_mongodb:
connections:
default:
server: mongodb://localhost:27017
options: {}
second:
server: mongodb://localhost:27018
options: {}
default_database: test_database
document_managers:
default:
auto_mapping: true
second:
auto_mapping: true
Любая идея?!
Спасибо!
1 ответ
Этот пример описан в разделе " Несколько подключений " справочника по настройке комплекта. Каждое соединение и менеджер документов должны иметь уникальное имя, и тогда конфигурация менеджера документов должна ссылаться на соответствующее имя соединения. Я полагаю, что последний фрагмент - это то, чего не хватало в вашем первоначальном примере. Цитирование комплекта документов:
doctrine_mongodb:
default_database: hello_%kernel.environment%
default_connection: conn2
default_document_manager: dm2
metadata_cache_driver: apc
connections:
conn1:
server: mongodb://a.example.com:27017
conn2:
server: mongodb://b.example.com:27017
document_managers:
dm1:
connection: conn1
metadata_cache_driver: xcache
mappings:
AcmeDemoBundle: ~
dm2:
connection: conn2
mappings:
AcmeHelloBundle: ~
Я бы предложил использовать имена, отличные от "default", для ваших соединений и менеджеров документов, чтобы избежать путаницы. Обратите внимание, что имена менеджера документов теперь будут частью идентификатора службы. В соответствии с приведенной выше конфигурацией второе диспетчер соединений и документов будет иметь псевдонимы в качестве идентификаторов службы по умолчанию (см.: default_connection
а также default_document_manager
). Цитируя второй пример из документации, конкретные идентификаторы услуг будут:
$conn1 = $container->get('doctrine_mongodb.odm.conn1_connection');
$conn2 = $container->get('doctrine_mongodb.odm.conn2_connection');
$dm1 = $container->get('doctrine_mongodb.odm.dm1_document_manager');
$dm2 = $container->get('doctrine_mongodb.odm.dm2_document_manager');