今天碰到一个连接多个数据库的问题,那么在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.