何らかの理由で、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 model
a を各モデルに書きました。私の拡張は常に保存されます。new class
websiteM extends website
urlM extends url
gii
スレーブ db からの db テーブル:
スレーブのアクティブなslave url model
データベースの 1 つにデータを格納するクラスがあります。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!
),