0

我对 YII 很陌生,我不明白。我得到的系统有错误。我必须更新一个 SQL 行计数器。sql表:

tbl_questions => answercount

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

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

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

4

3 回答 3

0

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

尝试以下

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

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

于 2013-05-23T09:53:54.347 回答
0
$model->answercount += 1;
$model->attributes = array('answercount' => $model->answercount);
$model->save();

要调试,请在您的配置中尝试以下操作:

'db'=>array(
         …
        'enableProfiling'=>true,
        'enableParamLogging' => true,
),
于 2013-05-23T09:46:23.033 回答
0

在 YII 中,更新计数器有三种方式。

  1. 模型->保存();
  2. 模型->saveCounters();
  3. 模型->updateCounters();

对于所有这些方法,我们必须在执行更新过程之前获取对象。IE,

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

它们之间的区别:

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

  2. $obj->saveCounters(数组('visits'=>'1'));

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

诀窍是:更好用saveCounters()

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

您也可以参考此链接了解更多详情。

于 2013-05-23T10:31:26.000 回答