2012-11-12 33 views
2

我正在使用PHP Lithium Framework。有沒有辦法通過配置來設置安全=>'多數'。使用Li3爲MongoDB設置safe =>'majority'

我正在使用mongodb複製,並且希望確保在驅動程序返回成功之前將數據寫入大多數replicaset成員。

我使用PHP 5.3和MongoDB的2.2.x

感謝 高塔姆

回答

4

這不是一個直接回答你的問題,但你可以設置在數據庫中的默認行爲。

cfg = rs.conf() 
cfg.settings = {} 
cfg.settings.getLastErrorDefaults = {w: "majority", j: true} 
rs.reconfig(cfg) 

而且在鋰你應該能夠有一個過濾器來做到這一點:

Connections::get('default')->applyFilter(array('create', 'update', 'delete'), function($self, $params, $chain){ 
    $params['options']['safe'] = true; 
     return $chain->next($self, $params, $chain); 
}); 
查詢

或者直接:

if (MyModel::update($query, $conditions, array(‘safe’ => true))) { 
    // success 
} 
+0

感謝Nils,我能夠測試併成功實現解決方案#1和#3,但我不確定我可以在哪裏添加過濾器。 #2是最好的選擇,因爲我不需要更改數據庫或將同步添加到每個創建,更新或刪除調用。謝謝Gautam – kobra

+0

由於這是與數據庫相關的東西,我會在數據庫引導文件中添加過濾器。 – Nils

2

我們有一個open pull request這將讓您將'safe' => true添加到您的數據庫配置中。很快就會合並。

否則,Nils發佈的解決方案應該很好。

+0

謝謝Nate,我會實施Nils的建議,直到功能添加到Li3。我的項目將於2012年12月開始生效,屆時這個功能將可用。謝謝高塔姆 – kobra