Update Yii Framework上的唯一键的重复输入错误

时间:2013-10-08 05:54:40

标签: php mysql yii

我在尝试更新表格中的记录时遇到以下错误:

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!'),

问题是什么?我哪里错了?

感谢。

3 个答案:

答案 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,
   ));

如果没有验证,则自动加载带有错误消息的“创建”视图。