Yii :: app() - > db-> createCommand()缓存查询结果?
问题描述:
我是Yii的新手,我在Yii::app()->db->createCommand()
上遇到问题,我在向表中插入一行后运行。我想检查提供参数的表中有多少行,但即使插入行,Yii::app()->db->createCommand()
也会返回0。Yii :: app() - > db-> createCommand()缓存查询结果?
这里的简化代码:
$photo_model = new Photo();
$ehp_model = new EventHasPhoto();
$photo_model->setIsNewRecord(true);
$photo_model->photo_id = null;
$photo_model->original_id = $data->id;
$photo_model->save();
$ehp_model->setIsNewRecord(true);
$ehp_model->event_id = $event_id;
$ehp_model->photo_id = $photo_model->photo_id;
$ehp_model->is_approved = ($event_model->moderation == 1 ? -1 : 1);
$ehp_model->save();
$count = Yii::app()->db->createCommand()->select('COUNT(p.photo_id) AS num')
->from('photo AS p')
->join('event_has_photo AS ehp','ehp.photo_id=p.photo_id')
->where('p.original_id="'.$data->id.'" AND ehp.event_id='.$event_id)
->queryAll();
$exist = $count[0]["num"]; // exists is 0
价值的存在是0,但是当我运行通过MySQL的工作台我得到1相同的查询,所以我想有一些内置的多数民众赞成在返回陈旧的数据缓存机制。
有什么想法?
答
看起来像语法错误,错误报告关闭。
如果你没有通过true
查询所有,你不会得到一个关联数组;相反,你会得到一个整数索引键的结果。
换句话说,你$count
变量包含:
$count = array(
0=>array(0=>1)
)
随着error_reporting(
)设置为0,$count[0]["num"]
计算结果为false
在这种情况下。
来解决,通过true
到queryAll()
$count = Yii::app()->db->createCommand()->select('COUNT(p.photo_id) AS num')
->from('photo AS p')
->join('event_has_photo AS ehp','ehp.photo_id=p.photo_id')
->where('p.original_id="'.$data->id.'" AND ehp.event_id='.$event_id)
->queryAll(true);
$exist = $count[0]["num"];
或者使用queryScalar()
$count = Yii::app()->db->createCommand()->select('COUNT(p.photo_id) AS num')
->from('photo AS p')
->join('event_has_photo AS ehp','ehp.photo_id=p.photo_id')
->where('p.original_id="'.$data->id.'" AND ehp.event_id='.$event_id)
->queryScalar();
$exist = $count;
甚至使用原始的查询访问正确的数组元素:
$count = Yii::app()->db->createCommand()->select('COUNT(p.photo_id) AS num')
->from('photo AS p')
->join('event_has_photo AS ehp','ehp.photo_id=p.photo_id')
->where('p.original_id="'.$data->id.'" AND ehp.event_id='.$event_id)
->queryAll();
$exist = $count[0][0];