我想同时使用数据库连接。我有两台服务器有相同的数据库。我想同时更新两个数据库,即在我的应用程序上添加/更新/删除时,数据库都需要相应地更新。我在main.php中添加了以下内容
'db2'=>array(
'connectionString' => 'mysql:host=hostname;dbname=dbanme',
'emulatePrepare' => true,
'username' => 'username',
'password' => 'password',
'charset' => 'utf8',
'tablePrefix' => 'tbl_',
'enableProfiling'=>true,
'enableParamLogging'=>true,
'class' => 'CDbConnection',
),
然后在我的控制器中添加操作:
public function actionCreate()
{
$model=new TestTransaction;
if(isset($_POST['TestTransaction']))
{
$originalDbConnection = Yii::app()->db;
$latin1DbConnection = Yii::app()->db2;
$model->attributes = $_POST['TestTransaction'];
if($model->save()) {
Yii::app()->setComponent("db",$latin1DbConnection);
$model->save();
Yii::app()->setComponent("db",$originalDbConnection);
$this->redirect(array('view','id'=>$model->id));
}
}
$this->render('create',array(
'model'=>$model,
));
}
但这不起作用。请帮帮我。
答案 0 :(得分:0)
这是因为AR模型缓存数据库对象。
public function getDbConnection()
{
if(self::$db!==null)
return self::$db;
else
{
self::$db=Yii::app()->getDb();
if(self::$db instanceof CDbConnection)
return self::$db;
else
throw new CDbException(Yii::t('yii','Active Record requires a "db" CDbConnection application component.'));
}
}
您可以手动设置model $ db属性。
答案 1 :(得分:0)
尝试将setComponent的第三个参数设置为false:
if($model->save()) {
Yii::app()->setComponent("db",$latin1DbConnection, false); // set third parameter to false
$model->save();
Yii::app()->setComponent("db",$originalDbConnection, false);
$this->redirect(array('view','id'=>$model->id));
}
这会禁用将旧组件与旧组件合并。
感谢。