Symfony2 MongoDB Ошибка нескольких подключений

У меня проблема с настройкой MongoDB в Symfony2.

Технические характеристики:

"Symfony": "2.6.*""doctrine/mongodb-odm": "1.0.*@dev",
"doctrine/mongodb-odm-bundle": "3.0.*@dev"

У меня есть 2 базы данных, используемые в 2 разных комплектах, nxtlog и nxtsurvey, в MongoDB.
Первоначальная проблема, с которой я столкнулся, заключалась в том, что имя базы данных, добавленное в опциях, не было учтено, что привело к использованию базы данных «по умолчанию», которая, конечно, не существует. Я также не хочу добавлять default_connection и default_manager или даже default_database, так как оба соединения используются в неосновных комплектах.

==== Попытка # 1 ====

Вот оригинальный конфиг, который у меня был:

doctrine_mongodb:
connections:
nxtlog:
server: "%nxtlog_database_server%"options:
username: "%nxtlog_database_username%"password: "%nxtlog_database_password%"db: "%nxtlog_database_name%"nxtsurvey:
server: "%nxtsurvey_database_server%"options:
username: "%nxtsurvey_database_username%"password: "%nxtsurvey_database_password%"db: "%nxtsurvey_database_name%"document_managers:
nxtlog:
mappings:
NxtLogBundle: ~
nxtsurvey:
mappings:
NxtVibeSurveyBundle: ~

Чтобы это работало, я добавил имя БД в каждой аннотации к документу:

/**
* @MongoDB\Document(db="nxtlog")
*/
class ErrorLogs

Это временное решение, но так как я планирую повторно использовать пакеты в других моих проектах, я не хочу просматривать все документы и устанавливать имя базы данных.

==== Попытка # 2 ====

Моя вторая попытка была неукоснительно следовать документации, и поэтому я попробовал следующее:

doctrine_mongodb:
connections:
nxtlog_conn:
server: "%nxtlog_database_server%"options:
username: "%nxtlog_database_username%"password: "%nxtlog_database_password%"connect: true
db: "%nxtlog_database_name%"nxtsurvey_conn:
server: "%nxtsurvey_database_server%"options:
username: "%nxtsurvey_database_username%"password: "%nxtsurvey_database_password%"connect: true
db: "%nxtsurvey_database_name%"document_managers:
nxtlog_dm:
connection: nxtlog_conn
mappings:
NxtLogBundle: ~
nxtsurvey_dm:
connection: nxtsurvey_conn
mappings:
NxtVibeSurveyBundle: ~

И получите следующую ошибку:

ServiceNotFoundException in CheckExceptionOnInvalidReferenceBehaviorPass.php line 58:
The service "doctrine_mongodb.odm.nxtlog_conn_connection" has a dependency on a non-existent service "doctrine_mongodb.odm.nxtlog_conn_configuration".

Поэтому я понял, что у меня не может быть разных имен для соединений и менеджеров данных. В это я не поверил, так что я его погуглил, и у кого-то возникла похожая проблема, и ответом было добавить следующее в doctrine_mongodb:

default_commit_options: ~

Но это решение не сработало для меня, и после большего количества поисков я обнаружил, что jmikola, парень, который написал пакет (или его части), допустил ошибку, сказал, что исправил ее, и что default_commit_options не должен быть необходимая опция конфигурации. (См. https://github.com/doctrine/DoctrineMongoDBBundle/issues/222)

На данный момент мне нужна помощь, потому что это занимает слишком много времени, чтобы решить.

Спасибо

6

Решение

Некоторое время назад я тоже пытался настроить несколько соединений Doctrine, хотя в то время я использовал Zend Framework (и соответствующие модули Doctrine). Если я правильно помню, вам нужно настроить все Сервисы Doctrine с добавленным новым пространством имен (в вашем случае nxtlog_conn).

Я проверил источник ZF2 DoctrineMongoODMModule и я до сих пор помню это: если вы хотите иметь связь, вам нужна доктрина configuration service с префиксом того же пространства имен.

Судя по вашему сообщению об ошибке, это также относится к пакету Symfony, хотя я не смог найти ответственное местоположение в исходном коде пакета.

Сервис "doctrine_mongodb.odm.nxtlog_conn_connection" зависит от несуществующего сервиса "doctrine_mongodb.odm.nxtlog_conn_configuration",

Это в основном говорит вам: я хочу соединение, но подождите секунду, я не могу найти соответствующую конфигурацию!

Попытайтесь найти, как конфигурация настроена для orm_default подключение и настройте свою конфигурацию, как мудрый. Если вы столкнулись с другой ошибкой того же формата, найдите следующее требуемое имя службы, а затем промойте и повторите.

1

Другие решения

Хум, не уверен, но надеюсь, что это поможет. Здесь ссылка из группы Google
https://groups.google.com/d/msg/doctrine-user/6YCVAZ4h4nA/YrZNfSopmNUJ

doctrine_mongodb:
default_database: "%nxtlog_database_name%"default_connection: nxtlog_conn
default_document_manager: nxtlog_conn
connections:
nxtlog_conn:
server: "%nxtlog_database_server%"options:
username: "%nxtlog_database_username%"password: "%nxtlog_database_password%"connect: true
db: "%nxtlog_database_name%"nxtsurvey_conn:
server: "%nxtsurvey_database_server%"options:
username: "%nxtsurvey_database_username%"password: "%nxtsurvey_database_password%"connect: true
db: "%nxtsurvey_database_name%"document_managers:
nxtlog_conn:
connection: nxtlog_conn
mappings:
NxtLogBundle: ~
nxtsurvey_conn:
connection: nxtsurvey_conn
mappings:
NxtVibeSurveyBundle: ~
1

По вопросам рекламы [email protected]