Yii 1.1同时使用两个数据库连接

时间:2015-08-28 10:43:20

标签: php yii

我想同时使用数据库连接。我有两台服务器有相同的数据库。我想同时更新两个数据库,即在我的应用程序上添加/更新/删除时,数据库都需要相应地更新。我在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,
        ));
    }

但这不起作用。请帮帮我。

2 个答案:

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

这会禁用将旧组件与旧组件合并。

感谢。