Yii:覆盖getDbConnection方法并将CDbConnection从主数据库设置为从数据库

时间:2013-08-09 06:51:05

标签: yii

由于某种原因,我无法切换数据库连接以保存辅助数据库中的数据。

来自主db的db表:

我有一个website model类,用于存储有关website

的数据

WebsiteM extends Website wich extends CActiveRecord

我有一个url model类,用于存储有关url

的数据

UrlM extends Url wich extends CActiveRecord

每个url属于website;每个url都有一个名为FK的{​​{1}},告诉网站它属于;

由于website_idwebsite model每天都在变化,我为每个模型编写了url model来扩展它们,例如new classwebsiteM extends website这样当我使用urlM extends url重新生成模型时,我的增强功能始终会保存。

来自slave db的db表:

我有一个gii类,用于在其中一个从属活动dbs中存储有关slave url model的数据。

urlslave url model;

相同

就像这样:main url model

在某些时候,我尝试切换到辅助数据库,在新的类实例之后使用UrlSlaveM extends UrlSlave wich extends HActiveRecord wich extends CActiveRecord查找我需要切换到的relations的{​​{1}}像:

id

db

这应该有效,但事实并非如此。这是动作发生的地方,这是连接应该切换的地方:

$model_urlSlave_new = new UrlSlaveM();
<{1}}

中的

设置

$model_urlSlave_new::$server_id = $model_url->websiteM_relation->database_id;

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

以下代码已移至主模型类,并删除了hactiverecord类。

public static $server_id = 2;
    public static $master_db;

    public function getDbConnection() {
        self::$master_db = Yii::app()->{"db" . self::$server_id};
        if (self::$master_db instanceof CDbConnection) {
            self::$master_db->setActive(true);
            return self::$master_db;
        }
        else
            throw new CDbException(Yii::t('yii', 'Active Record requires a "db" CDbConnection application component.'));
    }

它有效。测试