文件上传 - 违反完整性约束:1062 键“PRIMARY”的重复条目“1”

File Upload - Integrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY

我正在尝试制作文件上传图片,但结果出错。描述错误如下。

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY'

这个代码控制器

public function actionUpload()
        {
           $model = new \app\models\UserPhoto();
           if (\Yii::$app->request->post()) {
            $model->photo = \yii\web\UploadedFile::getInstance($model, 'photo');
            $model->user_id = \Yii::$app->user->id;
            if ($model->validate()) {
                $saveTo = 'uploads/' . $model->photo->baseName . '.' . $model->photo->extension;
                if ($model->photo->saveAs($saveTo)) {
                    $model->save(false);
                    Yii::$app->session->setFlash('success','Success uploaded !');
                }
            }
        }

        return $this->render('upload', ['model' => $model]);      
        }

您的 SQL 服务器说:您在 user_photo 中已有另一张照片 user_id = 1,并且您已配置 user_photo table 使用 user_id 作为 PRIMARY KEY,这意味着不允许重复 user_id

实际上,您已经按照每个用户最多可以使用一张照片的方式构建了 user_photo table。之后要更改照片,请使用 UPDATE 而不是 INSERT。一些流行的数据库有一个 "upsert" 语法,它基本上一次完成插入或更新,所以如果你的数据库支持,就使用它。

如果您希望您的用户能够上传多张照片(根据文件名判断),您需要更改 PRIMARY KEY,大概您希望它是 FOREIGN KEY 而不是确保只有有效的 user_id 可以与照片关联。