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

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

Мой контроллер:
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
  • Вопрос задан
  • 172 просмотра
Решения вопроса 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 товара.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы