出于某种原因,我无法切换数据库连接以将数据保存在辅助数据库中。
来自主数据库的数据库表:
我有一个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!
),