Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 更新Yii框架上唯一密钥的重复输入错误_Php_Mysql_Yii - Fatal编程技术网

Php 更新Yii框架上唯一密钥的重复输入错误

Php 更新Yii框架上唯一密钥的重复输入错误,php,mysql,yii,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']

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

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!'),
问题是什么?我错在哪里


谢谢。

您被指定了
插入
场景的规则。如果要将规则应用于所有场景,如
更新
,则必须将规则更改为:

array('pan','unique','message'=>'{attribute}:{value}已经存在!'),

或者,如果希望将规则应用于
insert&update
scenarios,请将规则设置为:


数组('pan'、'unique'、'on'=>'插入、更新'、'message'=>'{attribute}:{value}已存在!'),
模型规则()

控制器创建或更新操作:

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

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

因为您已经说过@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,
        ));
    }
用户模型规则()方法

    public function rules()
        {
         array('username', 'unique', 'on' => 'insert,update', 'message' => '{attribute}:{value} already exists!'),
            );
        }
请参阅我手动将用户名设置为
admin
,除
admin
用户外,验证将失败,正如预期的那样,并由其他人指出


您的应用程序应该可以正常工作,但您必须在模型规则设置中将
'on'=>'insert'
更改为
'on'=>'insert,update'
,谢谢,但我尝试了这两种情况,但仍然显示唯一的键错误。事实上,在更新的情况下,它应该接受这一点,因为我没有在那里更新PAN卡。为什么-ve?有人能解释一下吗?你们能用pan显示一下表组中有多少条记录吗<代码>按pan从表组中选择*;我担心的是,当更新pan='pan2'时,如果pan2已经存在,它将明显失败。不幸的是,它的习惯是一些人在没有任何理由和解释的情况下否决投票。你是对的,但我的情况略有不同。我首先在数据库中插入数据,该数据工作正常,然后我将其呈现到我所在的更新页面中显示所有字段,用户可以根据需要更新任何更改。假设用户不想更改PAN卡,则他将离开该字段。所以在这种情况下,表应该接受这一点,但它显示的唯一键错误是不正确的。当我更新$model->save()控制“$model->isNewRecord”时,如果更新“unique”字段是用其他记录验证的,但不是用他自己验证的……我认为这应该像预期的那样工作,我测试了它,并且工作正常
    public function rules()
        {
         array('username', 'unique', 'on' => 'insert,update', 'message' => '{attribute}:{value} already exists!'),
            );
        }