Yii的默认配置为一个数据库,不过可以很容易的支持多个数据库的操作, 这为按业务分割数据库提供了基础设施。如下所示:
- //cms DB connection
- 'db' => (defined('DB_CONNECTION') ? array(
- 'connectionString' => DB_CONNECTION,
- 'username' => DB_USER,
- 'password' => DB_PWD,
- 'charset' => 'utf8',
- 'emulatePrepare' => true,
- 'enableParamLogging' => true,
- 'schemaCachingDuration' => 3600, //cache table schema
- ) : array()),
- //member DB connection
- 'db_member' => (defined('DB_CONNECTION_MEMBER') ? array(
- <span style="color:#FF6666;"> 'class'=> 'CDbConnection' , </span>
- 'connectionString' => DB_CONNECTION_MEMBER,
- 'username' => DB_USER_MEMBER,
- 'password' => DB_PWD_MEMBER,
- 'charset' => 'utf8',
- 'emulatePrepare' => true,
- 'enableParamLogging' => true,
- 'schemaCachingDuration' => 3600, //cache table schema
- ) : array()),
然后在模型中重载getDbConnection函数,比如: - class Point extends CActiveRecord {
-
- public function getDbConnection() {
-
- return Yii::app()->db_member;
- }
- ...
- }
如果有很多模型会使用db_member, 可以从CActiveRecord派生一个子类:CMemberActiveRecord, 把getDbConnection的重写放在该AR的子类中。 然后模型都从该CMemberActiveRecord中派生。
多数据库配置遇到的一个典型的错误是: Object configuration must be an array containing a class element 原因是配置中非$db的其他数据库没有设置class属性,添加该属性并设置其值为CDbConnection即可。
参考链接 http:///models-and-multiple-database-connections
by iefreer
|