我有关于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;
}
答案 0 :(得分:0)
CActiveRecord仅在执行afterSave()后执行isNewRecord测试。
因此,在您的代码中,$ model-> isNewRecord尚未经过测试。
也许在你的情况下,最好设置你自己的标志(或模型属性),因为你无论如何都知道它不是你代码中那一点的新记录。