запрос на изменение laravel после загрузки

#laravel #laravel-5 #laravel-5.3

#laravel #laravel-5 #laravel-5.3

Вопрос:

Пытаюсь обновить свой запрос после загрузки файла: (Laravel 5.3)


$path = Storage::disk('s3')->putFile($destination, $request->file($name)); // works
$request->merge(array($name => $path)); // doesn't work
$myModel->update($request->all())

Я знаю, что не могу заменить файл строкой в своем запросе, так как же я должен это сделать?

Видел много сообщений об этом, но общий, должно быть, более простой способ, чем :


$res = $request->except($myInputFileName) // turn it into array
$res[$myInputFileName] = $path

Есть какое-нибудь красивое решение?

Редактировать : не сейчас: работайте с запросом как с массивом

Ответ №1:

Почему бы просто не попробовать это

 $inputData = $request->all();
$path = Storage::disk('s3')->putFile($destination, $request->file($name));
$inputData[$name] = $path;
$myModel->update($inputData);
  

Комментарии:

1. Да, я знаю, что могу сделать это таким образом, превратив свой запрос в массив (как я сказал в своем посте) Я просто подумал, что есть способ получше: например, такой, при котором путь к моему файлу, введенному для ввода, будет меняться автоматически

2. @r.flipo, когда вы делаете это, вы используете много дополнительной памяти, потому что вы дублируете почти все данные запроса из объекта запроса.

3. в любом случае мне придется $ request-> all (), чтобы обновить мою модель

Ответ №2:

Просто сделайте это:

 $request[$name] = $path;
  

Однако я сомневаюсь, что вы хотите использовать $name в качестве имени столбца, поэтому, возможно, вы хотите сохранить $name и $path в столбцах с именами, подобными, например, file_name and file_path ? Затем сделайте это:

 $request['name'] = $name;
$request['path'] = $path;
  

После этого вы можете проверить $request содержимое с помощью:

 dd($request->all());
  

Комментарии:

1. @r.flipo, что именно не работает? Вы получаете какую-либо ошибку?

2. Нет, но, как я уже говорил в своем посте, вы не можете изменить файл запроса в строке запроса. Таким образом, это не меняет мой запрос

3. @r.flipo, только что попробовал обновленный код, он работает просто отлично.

4. использование laravel 5.3.18 по-прежнему не работает с вашим обновлением: ( $request[‘picture’] — это экземпляр UploadedFile, его путь является закрытым, и я не могу переопределить его в строку. Спасибо за ваше время, я предпочитаю массивы!

5. @r.flipo, ты ничего не сказал о переопределении загруженного файла. У меня это работает в версии 5.3, когда я переопределяю или добавляю новые простые данные, такие как строки. Чего именно вы пытаетесь достичь? Обычно после загрузки штрафа вам нужно сохранить его имя в базе данных, которая будет работать, если вы будете использовать код из моего ответа.