0

何らかの理由で、db 接続を切り替えてセカンダリ dbs にデータを保存することはできません。

メイン db からの db テーブル:

website modelに関するデータを格納するクラスがありwebsiteます。

WebsiteM extends Website wich extends CActiveRecord

url modelに関するデータを格納するクラスがありurlます。

UrlM extends Url wich extends CActiveRecord

それぞれが;urlに属します。websiteそれぞれに、それが属している Web サイトをurl示すFK名前があります。website_id

website modelとは日々変化しているため、と を使用してモデルを再生成すると、このように とのようにそれらを拡張するurl modela を各モデルに書きました。私の拡張は常に保存されます。new classwebsiteM extends websiteurlM extends urlgii

スレーブ db からの db テーブル:

スレーブのアクティブなslave url modelデータベースの 1 つにデータを格納するクラスがあります。url

slave url modelと同じmain url modelです。

こんな感じです:UrlSlaveM extends UrlSlave wich extends HActiveRecord wich extends CActiveRecord

ある時点で、次のような新しいクラスインスタンスの後に、切り替える必要があるのrelationsを見つけるために使用して、セカンダリデータベースに切り替えようとします。iddb

$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