@sequelone

Как загрузить изображение в CRUD модели Laravel и сохранить результат в БД?

При создании записи или её редактировании в поле таблицы с названием image записывается временный путь вместо названия файла. У меня есть такая функция:
public function update(Request $request, Round $round)
    {
        $request->validate([
            'name' => 'required'
        ]);

        $image = $request->file('image');
        $extension = $image->extension();
        $imageName = $image->getClientOriginalName();
        $image->move(storage_path('app/public/images/battles/battle'.$request->battle_id.'/round'.$request->rnum), $imageName);

        $request->merge([
            'image' => $imageName,
            'status' => $request->has('status') ? true : false
        ]);

        dd($request->all());

        $round->update($request->all());

        return redirect()->back()
            ->with('success', 'Запись обновлена.');
    }

Из неё видно, что я пытаюсь объединить массив с секцией status, это поле с чекбоксом работает нормально, думал, что по примеру смогу и название изображения в массив для обновления добавить, но что-то пошло не так.

dd распечатывает такой массив:
array:15 [▼
  "_token" => "RDfCfKC368hhGem8R8XwJjqE9jllPZGmYaREfTPc"
  "_method" => "PUT"
  "name" => "Без сожалений"
  "start" => "2021-04-07T01:54"
  "end" => "2021-04-07T01:54"
  "battle_id" => "2"
  "rnum" => "4"
  "title" => "tryrt"
  "htitle" => "trytry"
  "description" => "yrtyrt"
  "keywords" => "rtytry"
  "introtext" => "<p>rtytry</p>"
  "content" => "<p>trytryt</p>"
  "status" => true
  "image" => Illuminate\Http\UploadedFile {#1450 ▼
    -test: false
    -originalName: "logo (2).jpg"
    -mimeType: "image/jpeg"
    -error: 0
    #hashName: null
    path: "/var/www/bezbflava.ru/data/mod-tmp"
    filename: "phpavmPLE"
    basename: "phpavmPLE"
    pathname: "/var/www/bezbflava.ru/data/mod-tmp/phpavmPLE"
    extension: ""
    realPath: "/var/www/bezbflava.ru/data/mod-tmp/phpavmPLE"
    aTime: 2021-04-07 13:40:30
    mTime: 2021-04-07 13:40:30
    cTime: 2021-04-07 13:40:30
    inode: 3155818
    size: 151782
    perms: 0100600
    owner: 510
    group: 510
    writable: false
    readable: false
    executable: false
    file: true
    dir: false
    link: false
  }
]

В массиве выводится вложенный массив у секции image, а в базу сохраняется секция pathname вместо изображения. Как мне в бд записывать название загруженного файла? Буду очень признателен за помощь.
  • Вопрос задан
  • 618 просмотров
Решения вопроса 1
@sequelone Автор вопроса
Решилось вот таким образом.

/**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Round  $round
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Round $round)
    {
        $request->validate([
            'name' => 'required'
        ]);

        $request->merge([
            'status' => $request->has('status') ? true : false
        ]);

        $round->update($request->all());

        if($request->has('image')) {

            $image = $request->file('image');
            $extension = $image->extension();
            $imageName = $image->getClientOriginalName();
            $image->move(storage_path('app/public/images/battles/battle'.$request->battle_id.'/round'.$request->rnum), $imageName);
            $round->image = $imageName;

        }

        $round->save();

        return redirect()->back()
            ->with('success', 'Запись обновлена.');
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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