candy110 2014-08-27 19:47:36 11747次浏览 4条评论 0 0 0

目前用yii在做一个cms 按需求需要操作多个库 下面简单说下yii多库配置。
首先 找到protected > config > main.php配置文件,打开文件找到components组件配置,yii默认配置db 如果我们要加库可直接复制db配置项,但是有一点必须注意的是 新加的库配置必须要加'class' => 'CDbConnection',要不然会报错列子如下:

'db2'=>array(
    'class' => 'CDbConnection',
    'connectionString' => 'mysql:host=127.0.0.1;dbname=dataname',
    'emulatePrepare' => true,
    'username' => 'root',
    'password' => '123456',
    'charset' => 'utf8',
    'enableParamLogging'  => true
)

库配置好后该如何使用呢?现在我们建立一个user model来调用刚刚建立的数据库,请看下面:

class User extends CActiveRecord {  
    public function getDbConnection() {       
        return Yii::app()->db2;  
    }
}

这样我们在user model下面就可以操作db2数据了,另外如果我们有很多model要使用到db2库为了避免每个模型都要getDbConnection或者说针对db2写一些公用方法的话可以在protected > components文件夹下定义一个CActiveRecord 的子类。yii 的 model默认都是继承CActiveRecord类,我们可以这样改写在components文件下建立一个ContentActiveRecord.php子类该子类直接继承CActiveRecord代码如下:

class ContentActiveRecord extends CActiveRecord {
    public function getDbConnection() {
        return Yii::app()->db2;
    }
}

此时你可在该类下写一些公共方法,现在需要继承db2数据库的modle 可直接继承ContentActiveRecord,还是以user为列:

class User extends ContentActiveRecord{
   public static function model($className = __CLASS__){
        return parent::model($className);
    }

    public function tableName(){
        return "user";
    }
}
  • 评论于 2014-08-28 14:03 举报

    你这是 1 的吧?对吧??

    1 条回复
    评论于 2014-08-28 15:19 回复

    嗯 2还没时间看 等项目完 2也正式发布了 在研究

  • 评论于 2014-09-29 11:40 举报

    有明显的protected就是Yii1的标志、、、呵呵

  • 评论于 2014-10-11 21:14 举报

    这个是yii1.0的多库配置,2.0的和这个不同

    1 条回复
    评论于 2017-01-14 11:05 回复

    2.0的除了白狼的那个文章。。。还有别的文献可以参考的吗?

  • 评论于 2016-04-05 16:53 举报

    这样能把所有的读写操作分离吗? 写主库 读从库?

    1 条回复
    评论于 2017-01-14 13:18 回复

    这个估计是不出力读写分离的吧。。。

您需要登录后才可以评论。登录 | 立即注册