关于yii读写分离 [ 新手入门 ]
最新刚学习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();
}
共 1 条回复
-
julytwilight 回复于 2012-11-17 23:51 举报
找到问题了
原来是调用deleteAll()
和updateall()
的时候没有调用beforeDelete()
和beforeSave()
所以没有切换db链接
想问一下这是出于什么考虑呢?
julytwilight 青岛
注册时间:2011-08-07
最后登录:1970-01-01
在线时长:0小时0分
最后登录:1970-01-01
在线时长:0小时0分
- 粉丝0
- 金钱60
- 威望0
- 积分60