julytwilight 2012-11-17 15:02:41 4142次浏览 1条回复 0 0 0

最新刚学习yii 在一个项目里用到了 我继承的 CActiveRecord 改写了beforeSave beforeDelete dbWrite 都去调用主库 beforeFind dbRead 是用从库 大多数情况都是正确的 但是delete from like where uid = xxx的时候和update user set online_time = xxx 的时候回去执行从库 别的地方都是好用的 很奇怪这是什么问题 大家可以帮忙看一下么 谢谢

class ActiveRecord extends CActiveRecord
{
    public function master()
    {
        $l = new Logger(PATH . '/log/' . date('Y-m-d'));
        $another = 'sqler';
        $content = '|' . 'master' . '|' . $another;
        if (!$l->info($content)) {
            die('错了');
        }
        parent::$db = Yii::app()->db;
    }

    public function slave()
    {
        $l = new Logger(PATH . '/log/' . date('Y-m-d'));
        $another = 'sqler';
        $content = '|' . 'slave' . '|' . $another;
        if (!$l->info($content)) {
            die('错了');
        }
        $num = rand(1, 2);
        if ($num == 1)
        {
            parent::$db = Yii::app()->db1;
        }
        elseif ($num == 2)
        {
            parent::$db = Yii::app()->db2;
        }
    }

    /**
    * 保存数据前选择 主 数据库
    */
    protected function beforeSave(){
        parent::beforeSave();
        $this->master();
        return true;
    }

    /**
    * 删除数据前选择 主 数据库
    */
    protected function beforeDelete(){
        parent::beforeDelete();
        $this->master();
        return true;
    }

    /**
    * 读取数据选择 从 数据库
    */
    protected function beforeFind(){
        parent::beforeFind();
        $this->slave();
        return true;
    }

    /**
    * 获取master库对象
    */
    public function dbWrite(){
        return $this->master();
    }

    /**
    * 获取slave库对象
    */
    public function dbRead(){
        return $this->slave();
    }
  • 回复于 2012-11-17 23:51 举报

    找到问题了
    原来是调用deleteAll()updateall()的时候没有调用beforeDelete()beforeSave() 所以没有切换db链接
    想问一下这是出于什么考虑呢?

您需要登录后才可以回复。登录 | 立即注册