2016-09-04 8 views
1

Я пытаюсь сделать файл, загружающий изображение, и результатом является ошибка. Ошибка описания ниже.Загрузка файла - Нарушение ограничения целостности: 1062 Дублируемая запись '1' для ключа 'PRIMARY

SQLSTATE [23000]: Integrity нарушение ограничения: 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, чтобы использовать user_id в качестве ПЕРВИЧНОГО КЛЮЧА, что означает, что дубликат user_id запрещен.

Фактически вы создали таблицу user_photo таким образом, чтобы каждый пользователь мог использовать не более одной фотографии. Чтобы впоследствии изменить фотографию, используйте UPDATE вместо INSERT. Несколько популярных баз данных имеют синтаксис upsert, который в основном делает вставку или обновление за один раз, поэтому, если ваш db поддерживает это, используйте его.

Если вы хотите, чтобы пользователи могли загружать более чем одну фотографию (судя по имени файла), необходимо изменить PRIMARY KEY, предположительно, вы хотели, чтобы это было FOREIGN KEY вместо того, чтобы обеспечить силу только user_id может быть связано с фотографиями ,