我希望我的模型对多个数据库执行一些操作。假设我的模型是User类。它扩展了SynchroAR类(SynchroAR扩展了CActiveRecord)。在用户类:
protected function afterSave()
{
if($this->goSynchro)
$this->runSynchro('save');
parent::afterSave();
}
在SynchroAR: protected function runSynchro($method)
{
$this->goSynchro = false;
foreach($this->entryConns as $conn)
{
parent::$db = $conn;
parent::$db->setActive(true);
call_user_func(array($this, $method));
}
$this->goSynchro = true;
parent::$db = Yii::app()->usersdb;
parent::$db->setActive(true);
}
$entryConns
是一个数组,其中包含应该应用$method
的连接。现在我在$entryConns
中有一个条目。我打开了CWebLogRoute
,它实际上做了save()
方法,但我猜它在同一个数据库上执行了两次,因为第二个数据库的数据没有被改变。为什么?
我猜这是因为$db是静态的。
的启发:http://www.yiiframework.com/wiki/123/multiple-database-support-in-yii/
我会尝试这样的东西,在你的SynchroAR类。
<>之前…private $_currentDb = null;公共函数setDb($db = null){If ($db === null){$this->_currentDb = null;父::$ db -> setActive(真正的);}其他的{$this->_currentDb = $db;$ this -> _currentDb -> setActive(真正的);}}getDbConnection(){if($this->_currentDb !== null)返回$ this -> _currentDb;其他的返回父::$ db;}受保护的函数runsync ($method){$this-> gosync = false;foreach($this->entryConns = $conn){美元$ this -> setDb(康涅狄格州);call_user_func(数组(这方法)美元);}$this-> gosync = true;$ this -> setDb ();}