2016-09-04 2 views
1

Ich versuche, Datei hochladen Bild und Ergebnis ist ein Fehler. Der Beschreibungsfehler unten.Datei-Upload - Integrität Einschränkung Verletzung: 1062 doppelten Eintrag '1' für Schlüssel 'PRIMARY

SQLSTATE [23000]: Integrität Einschränkungsverletzung: 1062 doppelten Eintrag '1' für Schlüssel

Dieser Code Controller

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

Sie haben 'user_id' als Primärschlüssel festgelegt und dieser muss eindeutig sein. – Bizley

+0

Bitte beachten Sie, dass Sie den Code als tatsächlichen Text in Ihre Frage einfügen, im Gegensatz zu einem Screenshot. Es erleichtert anderen das Lesen und Kopieren des Codes aus Ihrer Frage. – Sherif

Antwort

2

Ihr SQL Server 'primären' sagt: Sie haben bereits ein anderes Foto in user_photo mit user_id = 1, und Sie haben Ihre user_photo Tabelle konfiguriert, um 0 zu verwendenals PRIMARY KEY, was bedeutet, dass Duplikate user_id nicht zulässig sind.

Effektiv haben Sie Ihre user_photo Tabelle so aufgebaut, dass jeder Benutzer höchstens ein Foto verwenden kann. Um das Foto anschließend zu ändern, verwenden Sie eine UPDATE anstelle einer INSERT. Einige populäre Datenbanken haben eine "upsert" -Syntax, die im Grunde ein insert-or-update auf einmal durchführt. Wenn Ihre db dies unterstützt, verwenden Sie sie.

Wenn Sie Ihre Benutzer in der Lage sein wollten mehr als ein Foto hochladen (durch den Dateinamen zu urteilen) Sie PRIMARY KEY ändern müssen, vermutlich wollte man es ein FOREIGN KEY stattdessen sein nur, um sicherzustellen, gültig user_id mit Fotos in Verbindung gebracht werden .

Verwandte Themen