Как бороться с соединениями 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');
Другие вопросы по тегам