0

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

来自主数据库的数据库表:

我有一个website model类存储有关 a 的数据website

WebsiteM extends Website wich extends CActiveRecord

我有一个url model类存储有关 a 的数据url

UrlM extends Url wich extends CActiveRecord

每个都url属于一个website;每个url都有一个FK名称website_id,告诉网站它属于;

因为website modelandurl model每天都在变化,所以我为每个扩展它们的模型编写了 a new class,就像websiteM extends websiteand一样,urlM extends url当我使用 重新生成模型时gii,我的增强总是被保存。

来自从属数据库的数据库表:

我有一个slave url model类将有关 a 的数据存储url在一个从属活动数据库中。

与;slave url model相同main url model

就像这样:UrlSlaveM extends UrlSlave wich extends HActiveRecord wich extends CActiveRecord

在某些时候,我尝试切换到辅助数据库,通过在新的类实例之后relations找出我需要切换到id的数据库,例如:db

$model_urlSlave_new = new UrlSlaveM();

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

这应该工作,但它没有。这是动作发生的地方,也是连接应该切换的地方:

class HActiveRecord extends CActiveRecord {

    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.'));
    }

}

中的设置main.php

'db' => array(
            'connectionString' => 'mysql:host=localhost;dbname=dvc',
            'emulatePrepare' => true,
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ),
        'db2' => array(
            'connectionString' => 'mysql:host=localhost;dbname=dvc2',
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
            'tablePrefix' => '',
            'class' => 'CDbConnection'          // DO NOT FORGET THIS!
        ),
        'db1' => array(
            'connectionString' => 'mysql:host=localhost;dbname=dvc1',
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
            'tablePrefix' => '',
            'class' => 'CDbConnection'          // DO NOT FORGET THIS!
        ),
4

1 回答 1

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.'));
    }

有用。测试。

于 2013-08-09T08:01:24.793 回答