我有一個在Symfony2中設置MongoDB的問題。Symfony2 MongoDB多個連接錯誤
規格:
"Symfony": "2.6.*"
"doctrine/mongodb-odm": "1.0.*@dev",
"doctrine/mongodb-odm-bundle": "3.0.*@dev"
我在2個不同的束,nxtlog和nxtsurvey,MongoDB中使用2個數據庫。 我原來的問題是我在選項中添加的數據庫名稱沒有考慮到,導致數據庫使用默認值,這當然不存在。我也不想添加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: ~
爲了使其工作,我加名每個文檔中的db註釋:
/**
* @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: ~
,並獲得以下錯誤:
所以我想通了,我不能有不同的名稱nections和數據管理器。我不相信,所以我GOOGLE了它,有人也有類似的問題,答案是添加下doctrine_mongodb如下:
default_commit_options: ~
但是這種解決方案並沒有爲我工作,而更多的谷歌搜索後,我發現jmikola,編寫包(或部分包)的人犯了一個錯誤,他說他修復了它,並且default_commit_options不應該是必需的配置選項。 (參考https://github.com/doctrine/DoctrineMongoDBBundle/issues/222)
在這一點上我需要一些幫助,因爲這需要太多的時間來解決。
由於
這正是我以前嘗試過,但我不希望默認參數的鏈接,我的情況下,它是完全無用的。爲什麼我會使用默認數據庫或連接,如果我有2個使用2個不同數據庫的包,因爲這兩個包都有完全不同的邏輯,並且不相互依賴。 – nicom974 2015-03-08 04:47:17
是的,我明白你不想要一個默認參數,但你必須知道,默認並不意味着odm會自動使用它。你是誰選擇你使用的連接。 – 2015-03-09 09:00:40
好吧,它實際上確實因爲某種原因一直選擇默認的。到目前爲止,我發現的唯一方法是在註釋中添加db名稱,這對我的用例來說不是一個好的解決方案。我xdebugged它,並看到從連接選項的數據庫實際上正在採取,但沒有在最後使用。我還沒有弄清楚爲什麼。 – nicom974 2015-03-09 14:10:39