删除或保存到多个数据库使用CActiveRecord



我希望我的模型对多个数据库执行一些操作。假设我的模型是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 ();}

相关内容

  • 没有找到相关文章

最新更新