函数loadModel()返回一个"新记录"

时间:2014-08-20 04:48:25

标签: php primary-key yii

我有关于actionUpdate的以下代码:

public function actionUpdate($id)
{

    $model=$this->loadModel($id);

    // Uncomment the following line if AJAX validation is needed
    //$this->performAjaxValidation($model);

    echo $model->isNewRecord;

    if(isset($_POST['Program']))
    {
        $model->attributes = $_POST['Program'];

        if($model->save()){

            $this->redirect(array('admin'));
        }
    }

    $this->render('update',array(
        'model'=>$model,
    ));
}

echo $model->isNewRecord返回TRUE,但模型不为空。我有一个具有给定id的现有模型,并且属性与模型匹配,所以当我调用$model->save()时它给了我

CDbException CDbCommand failed to execute the SQL statement: Duplicate entry for key 'PRIMARY'.

我无法找到将其视为新记录的原因。

提前致谢!

编辑:

这是我loadModel()功能的代码:

public function loadModel($id)
{

    $model=Program::model()->findByPk($id);
    if($model===null)
        throw new CHttpException(404,'The requested page does not exist.');
    return $model;
}

1 个答案:

答案 0 :(得分:0)

CActiveRecord仅在执行afterSave()后执行isNewRecord测试。

因此,在您的代码中,$ model-> isNewRecord尚未经过测试。

也许在你的情况下,最好设置你自己的标志(或模型属性),因为你无论如何都知道它不是你代码中那一点的新记录。