2016-09-04 34 views
1

ファイルアップロードイメージを作成しようとしましたが、結果がエラーです。説明は以下の通りです。ファイルアップロード - 整合性制約違反:1062キー 'PRIMARY重複エントリ' 1 '

SQLSTATE [23000]:整合性制約違反:1062重複したエントリ '1' キー '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]);  
 
     }

+0

あなたは主キーとして 'user_id'を設定しました。これはユニークでなければなりません。 – Bizley

+0

スクリーンショットではなく、あなたの質問に実際のテキストとしてコードを含めることを検討してください。それは他の人があなたの質問からコードを読んだり、コピーしたりするのを容易にします。 – Sherif

答えて

2

あなたのSQLサーバーは言います: user_photoに別の写真が既にあります。user_id = 1です。user_photoテーブルを0に設定していますは、user_idという重複を意味するPRIMARY KEYは使用できません。

user_photoテーブルを作成して、各ユーザーが最大で1枚の写真を使用できるようにしました。後で写真を変更するには、INSERTの代わりにUPDATEを使用してください。いくつかの一般的なデータベースは基本的に挿入または更新を行いますので、データベースがサポートしている場合はそれを使用する "upsert"構文を持っています。

は、あなたのユーザーがあなたのPRIMARY KEYを変更する必要があります(ファイル名から判断)、複数の写真をアップロードできるようにしたい場合は、おそらくあなたはそれが唯一のuser_id、有効な写真関連付けることができることを確認する代わりにFOREIGN KEYになりたかったです。

関連する問題