今天碰到一个连接多个数据库的问题,那么在Yii中如何实现呢?刚开始也是瞎摸索,后来发现竟然还可以。以下是配置:

在config/main.php里做配置,比如需要连接mysql中两个数据库

'db'=>array(
                                                                                                                                                                            
            'connectionString' => 'mysql:host=localhost;dbname=test',
            'emulatePrepare' => true,
            'username' => 'root',
            'password' => '123456',
            'charset' => 'utf8',
                        'tablePrefix'=>'cp_'
        ),
        'db2'=>array(
            'class'=>'CDbConnection',
            'connectionString' => 'mysql:host=localhost;dbname=gmipost_dev',
            'emulatePrepare' => true,
            'username' => 'root',
            'password' => '123456',
            'charset' => 'utf8',
                        'tablePrefix'=>'gmi_'
        ),

注:第二个数据库配置需要加上'class'=>'CDbConnection',那么访问的时候怎么办呢?其实很简单,如果使用gii生成model,会发现,在db2中的model里有一个函数getDbConnection,这个函数为:

public function getDbConnection()
    {
        return Yii::app()->db2;
    }

也就是说在model里加上这样一个方法,那么该数据库用Yii::app()->db2就可以访问,当然我们实例化model时直接调用model()方法就行,它会自动调用getDbConnection方法,这样我们就可以访问多个数据库。

同样的,如果一个是mysql数据库,另一个是sqllite或者mssql,这样做也是可以的。要注意的是第二个配置需要加上'class'=>'CDbConnection',否则就会报错:Object configuration must be an array containing a "class" element.