我在尝试更新表格中的记录时遇到以下错误:
CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'ABCD1111P' for key 'pan_UNIQUE'
表中有列,即“pan”,其中分配了唯一键。
以下是我在控制器中的代码:
$model->pan = $_POST['CustomerBasics']['pan'];
$model->cell = $_POST['CustomerBasics']['cell'];
$model->gender = $_POST['PersonalDetails']['gender'];
$valid = $model->validate();
print_r($model->getErrors());
if ($valid) {
$model->update();
$personal_details_id = $model->personal_details_id;
}
在模特:
array('pan', 'unique', 'on' => 'insert', 'message' => '{attribute}:{value} already exists!'),
问题是什么?我哪里错了?
感谢。
答案 0 :(得分:8)
因为您已经说@Daneil Vaquero的解决方案无效。但是它的工作方式如下。
UserController更新操作
public function actionUpdate($id)
{
$model=$this->loadModel($id);
if(isset($_POST['User']))
{
$model->attributes=$_POST['User'];
$model->username='admin';
if( $model->validate() && $model->save())
$this->redirect(array('view','id'=>$model->id));
else
print_r($model->getErrors());
}
$this->render('update',array(
'model'=>$model,
));
}
用户模型规则()方法
public function rules()
{
array('username', 'unique', 'on' => 'insert,update', 'message' => '{attribute}:{value} already exists!'),
);
}
请参阅我手动将用户名设置为admin
,但admin
用户除外,验证将失败,按预期并由其他人指出。
您的应用程序应该可以正常工作,除非您必须在模型规则设置中将'on' => 'insert'
更改为'on' => 'insert,update'
答案 1 :(得分:0)
您在insert
方案中指定了规则。如果您希望将规则应用于update
等所有方案,则必须更改规则:
array('pan', 'unique', 'message' => '{attribute}:{value} already exists!'),
或者,如果您希望将规则应用于insert & update
方案设置规则:
array('pan', 'unique', 'on' => 'insert,update', 'message' => '{attribute}:{value} already exists!'),
答案 2 :(得分:0)
模型规则():
array('pan', 'unique'),
控制器创建或更新操作:
if (isset($_POST['Pan'])) {
$model->attributes = $_POST['Pan'];
if ($model->save()) {
Yii::app()->user->setFlash('success', 'PAN Created/Updated');
$this->redirect(array('update', 'id' => $model->id));
}
}
$this->render('create', array(
'model' => $model,
));
如果没有验证,则自动加载带有错误消息的“创建”视图。