Yii :: app() - > db-> createCommand()缓存查询结果?

时间:2014-11-01 21:41:33

标签: php yii

我是Yii的新手,我在向表中插入行后运行Yii::app()->db->createCommand()时遇到问题。我想检查表中提供了params的行数,但即使插入了行,Yii::app()->db->createCommand()也会返回0.

以下是简化代码:

$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

exists的值为0,但是当我通过My​​SQL工作台运行相同的查询时,我得到1,所以我假设有一些内置的缓存机制会返回过时的数据。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

看起来像语法错误,关闭错误报告。

如果你没有将true传递给queryAll,你就不会得到一个关联数组;相反,您将获得带有整数索引键的结果。

换句话说,您的$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];