如何使用YII模型更新一个sql计数器?

时间:2013-05-23 09:31:28

标签: sql model yii

我对YII很新,我不明白。 我的系统出错了。我必须更新SQL行计数器。 sql table:

  

tbl_questions => answercount

我有这个代码可以修改它:

$model = Questions::model()->findByPk($id);
                    $model->answercount += 1;
                    $model->save(false);

问题是:该解决方案不做任何事情。我怎样才能找到问题,或解决方案是什么?我可以为此使用一个很好的教程。

3 个答案:

答案 0 :(得分:0)

$model->answercount += 1;
$model->attributes = array('answercount' => $model->answercount);
$model->save();

要进行调试,请在配置中尝试以下操作:

'db'=>array(
         …
        'enableProfiling'=>true,
        'enableParamLogging' => true,
),

答案 1 :(得分:0)

可能存在与保存操作有关的一个或多个错误。您正在执行的进程将更新的数据保存到数据库,但更新或其他错误可能会出现问题,导致无法执行保存。

尝试以下

if(!$model->save())
{
    throw new Exception("Error saving model : " . var_export($model->getErrors(), true));
}

如果保存操作失败,这将引发异常,也许我们可以从那里开始。

答案 2 :(得分:0)

在YII中,有三种方法可以更新计数器。

  1. 模型 - >保存();
  2. 模型 - > saveCounters();
  3. 模型 - > updateCounters();
  4. 对于所有这些方法,我们必须在执行更新过程之前获取对象。即,

    $obj = YourObject->model()->findByPk($id);
    

    他们之间的差异:

    1. $ obj->访问次数+ = 1; $ obj->保存();

    2. $ obj-> saveCounters(阵列( '访问'=> '1'));

    3. $ obj-> updateCounters(array('visits'=>'1','id'=> $ id ));

    4. 诀窍是: 最好使用saveCounters()

      如果您使用updateCounters(),请确保已将ID设置为条件,如代码中突出显示的那样。否则,所有记录的“访问次数”字段+1。

      您还可以参考此link了解详情。