我希望我的模型在多个数据库中执行某些操作。假设我的模型是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()
方法,但我想它在同一个数据库上执行了两次,因为第二个数据库中的数据没有被更改。为什么呢?
答案 0 :(得分:2)
我猜这是因为$ db是静态的。
灵感来自: http://www.yiiframework.com/wiki/123/multiple-database-support-in-yii/
我会在你的SynchroAR课程中尝试这样的事情。
... private $_currentDb = null; public function setDb($db = null) { if($db === null) { $this->_currentDb = null; parent::$db->setActive(true); } else { $this->_currentDb = $db; $this->_currentDb->setActive(true); } } public function getDbConnection() { if($this->_currentDb !== null) return $this->_currentDb; else return parent::$db; } protected function runSynchro($method) { $this->goSynchro = false; foreach($this->entryConns as $conn) { $this->setDb($conn); call_user_func(array($this, $method)); } $this->goSynchro = true; $this->setDb(); }