Как сохранить имя файла в базе данных? - PullRequest
0 голосов
/ 14 апреля 2019

Я хочу добавить имя файла в базу данных (к $model->photo_url), когда я загружаю фотографию и получаю ошибку:

SQLSTATE[HY000]: General error: 1364 Field 'photo_url' doesn't have a default value

Я пытался присвоить $filename $photo_url после saveAs() но это не работает.

Контроллер:

public function actionCreate() {
    $model = new Doctors();
    if ($model->load(Yii::$app->request->post())) {
        $model->image = \yii\web\UploadedFile::getInstance($model, 'image');

        if ($model->save()) {
              $model->uploadPhoto();
            $model->photo_url = $model->fileName;               
            $this->saveSpecialities($model);               
        }
        return $this->redirect(['view', 'id' => $model->id]);
    }
    return $this->render('create', [
                'model' => $model
    ]);
}

//
protected function saveSpecialities($model) {
    foreach ($model->specialites as $var) {
        $speciality = new DoctorsSpeciality();
        $speciality->speciality_id = $var->id;
        $speciality->doctor_id = $model->id;
        $speciality->save();
    }
}

Модель

public function uploadPhoto() {
    if ($this->validate()) {
        $this->fileName = $this->generateSlug() . '.' . $this->image->extension;            
        $this->image->saveAs($this->path . $this->fileName);
        Image::thumbnail($this->path . $this->fileName, 200, 200)->save($this->path_middle . $this->fileName, ['quality' => 100]);
        Image::thumbnail($this->path . $this->fileName, 100, 100)->save($this->path_small . $this->fileName, ['quality' => 100]);
        return true;
    } else {
        return false;
    }
}

protected function generateSlug() {
    return Inflector::slug($this->lastname . '-' . $this->middlename . '-' . $this->firstname . '-' . $this->title);
}

Все файлы правильно сохраняются в папки, но как я могу сохранить $this->fileName to $this->photoUrl?

PS Когда я пытаюсь сделать $this->photo_url = $this->fileName; в модели, я получаю ту же ошибку со значением по умолчанию.

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

Вам нужно установить поле перед попыткой сохранить модель:

if ($model->uploadPhoto() && $model->save()) {             
    $this->saveSpecialities($model);               
}

А затем установить photo_url внутри uploadPhoto():

public function uploadPhoto() {
    if ($this->validate()) {
        $this->fileName = $this->generateSlug() . '.' . $this->image->extension;  
        $this->photo_url = $this->fileName;            
        $this->image->saveAs($this->path . $this->fileName);
        Image::thumbnail($this->path . $this->fileName, 200, 200)->save($this->path_middle . $this->fileName, ['quality' => 100]);
        Image::thumbnail($this->path . $this->fileName, 100, 100)->save($this->path_small . $this->fileName, ['quality' => 100]);
        return true;
    } else {
        return false;
    }
}
0 голосов
/ 14 апреля 2019

для этого (SQLSTATE [HY000]: общая ошибка: 1364 Поле 'photo_url' не имеет значения по умолчанию)

Решение: Установите значение по умолчанию для Created_By (например: пустой VARCHAR), и триггер будет обновлять значение в любом случае.

...