2015-08-28 59 views
0

我想同時使用數據庫連接。我有兩臺服務器具有相同的數據庫。我想同時更新兩個數據庫,即在我的應用程序上添加/更新/刪除數據庫都需要相應更新。我已經加入以下內容的main.phpYii 1.1同時使用兩個數據庫連接

 '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

試試這個 - http://yii.at/ehwM15X&http://yii.at/JaUjsSR –

回答

0

這是因爲AR模型緩存DB對象。

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

您可以手動設置模型$ db屬性。

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

這種禁止合併新組件與舊的。

謝謝。