Задать вопрос

Как добавить несколько имён файлов в БД?

Сделал загрузку нескольких фотографий на сервер и с записью в БД имён файлов, и тут проблема в БД записываеться только одно значение а добавляю например три файла, как мне сделать так что добавлялось не одно значение а все три или сколько загружаю фото!

Мой контроллер:
if ($model->load(Yii::$app->request->post()) && $model->save()) {
            $model->images = UploadedFile::getInstances($model, 'images');

            if ($filename= $model->uploadImages()) {
                $model->product_id = $id;
                $model->images = $filename;
                $model->save();
            }

            Yii::$app->session->setFlash('success', "Товар {$model->name} обновлён");
        }


Модель
public function uploadImages(){
        if($this->images) {
            foreach ($this->images as $file) {
                $filename=Yii::$app->getSecurity()->generateRandomString(15);
                if ($file->saveAs('uploads/images/products/source/' . $filename . '.' . $file->extension)){
                    return $filename;
                }
            }
            return true;
        }else {
            return false;
        }
    }


В видах:
<?= $form->field($model, 'images[]')->fileInput(['multiple' => true, 'accept' => 'image/*']) ?>


Загружаю три фото добавляться только одно значение:
5e70a498ac695780082116.jpeg
  • Вопрос задан
  • 173 просмотра
Подписаться 2 Простой 12 комментариев
Решения вопроса 1
Reexel
@Reexel
public function uploadImages(){
        if($this->images) {
            $filesName = [];
            foreach ($this->images as $file) {
                $filename=Yii::$app->getSecurity()->generateRandomString(15);
                if ($file->saveAs('uploads/images/products/source/' . $filename . '.' . $file->extension)){
                    $filesName[] = $filename;
                }
            }
            return $filesName;
        }else {
            return false;
        }
    }


if ($model->load(Yii::$app->request->post()) && $model->save()) {
            $model->images = UploadedFile::getInstances($model, 'images');

            if ($filenames= $model->uploadImages()) {
                $model->product_id = $id;
                if($filenames && $model->save()) {
                     foreach($filenames as $filename) {
                           $modelImage = new Image();
                           $modelImage->name = $filename;
                           $modelImage->item_id = $model->id;

                           ... записываем еще свойства объекта картинки

                           if($modelImage->save()) {
                                    Yii::$app->session->setFlash('success', "Товар {$model->name} обновлён");
                           }
                      }
                }
            }
        }


По коду не совсем понятно, какие модели и как сформированы (поэтому в код может быть не совсем корректен). В общем идея такая: собираем в массив названия картинок и передаем его. Затем в модели картинок записываем эти файлы после сохранения модели товара (необходимо для наличия id товара.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы