2

テーブルのレコードを更新しようとすると、次のエラーが発生します。

CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'ABCD1111P' for key 'pan_UNIQUE'

テーブルには、一意のキーが割り当てられた列、つまり「パン」があります。

そして、以下はコントローラーの私のコードです:

$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のソリューションは機能していないとおっしゃっていますが、次のように機能しています。

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

ユーザーモデル rules() メソッド

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

adminユーザー名を手動で に設定したことを参照してくださいadmin

モデル ルール設定でに変更'on' => 'insert'する必要がある場合を除いて、アプリケーションは正常に動作するはずです。'on' => 'insert,update'

于 2013-10-09T17:27:50.430 に答える
0

insertシナリオのルールが指定されています。のようなすべてのシナリオにルールを適用する場合は、ルールを次のようupdateに変更する必要があります。

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

insert & updateまたは、シナリオ設定ルールにルールを適用する場合は、次のようにします。

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 に答える