2

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

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

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

谢谢。

4

3 回答 3

8

既然您说过@Daneil Vaquero 的解决方案不起作用。但是它的工作方式如下。

用户控制器更新操作

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,
        ));
    }

用户模型 rules() 方法

    public function rules()
        {
         array('username', 'unique', 'on' => 'insert,update', 'message' => '{attribute}:{value} already exists!'),
            );
        }

请参阅我手动将 username 设置为admin,除了adminuser ,验证将失败,正如其他人所预期和指出的那样。

您的应用程序应该可以正常工作,除非您必须在模型规则设置中更改'on' => 'insert''on' => 'insert,update'

于 2013-10-09T17:27:50.430 回答
0

You are specified the rule on insert scenario. if you want the rule applied for all scenarios like update, have to change the rule as this:

array('pan', 'unique', 'message' => '{attribute}:{value} already exists!'),

Or if you want the rule applied on insert & update scenarios setting rule as this:

array('pan', 'unique', 'on' => 'insert,update', 'message' => '{attribute}:{value} already exists!'),

于 2013-10-08T06:05:39.377 回答
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,
   ));

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

于 2013-10-08T06:20:55.660 回答