Ошибка преобразования массива в строку при загрузке нескольких файлов в Laravel 5.8.38


Ошибка преобразования массива в строку при загрузке нескольких файлов в Laravel 5.8.38

22.10.2020 08:53:37 Просмотров 35 Источник

У меня есть ошибка преобразования массива в строку, когда я пытаюсь реализовать функцию множественной загрузки файлов в Laravel 5.8.38 Не могу найти никакого решения по этому поводу

В форме клинка у меня есть простая вещь:

<form class="form-horizontal" action="{{route('admin.estates.store')}}" method="post" enctype="multipart/form-data">
{{ csrf_field() }}

<label for="estate_image" class="mt-4">Images</label>
<input type="file" name="estate_image[]" multiple>

<input class="btn btn-primary" type="submit" value="Сохранить">
<input type="hidden" name="created_by" value="{{Auth::id()}}">
</form>

В магазине функция у меня есть:

Функция создает объект недвижимости(одно свойство). Если пользователь добавляет для него какие-то изображения, мы добавляем эти изображения в локальный путь и добавляем их в базу данных

если я комментирую $estate = Estate::create($request->all());, это работает нормально , но в этом случае недвижимость не добавляется в базу данных

public function store(Request $request)
{

    $estate = Estate::create($request->all());

    if($request->hasFile('estate_image')) {
        foreach ($request->file('estate_image') as  $image) {

                // do some image resize and store it on local path
                $filename = time() . '.' . $image->getClientOriginalExtension();
                $location = public_path('images\\' . $filename);
                Image::make($image)->resize(800, 400)->save($location);

                // add image info in database
                $estateimage = new EstateImages();
                $estateimage->image_path = $location;
                $estateimage->image_alt = 'testalt';
                $estateimage->save();
        }
    }
}

Есть ли у меня массив из входных данных

array:5 [▼
  "name" => array:2 [▼
    0 => "image1.jpg"
    1 => "image2.jpg"
  ]
  "type" => array:2 [▼
    0 => "image/jpeg"
    1 => "image/jpeg"
  ]
  "tmp_name" => array:2 [▼
    0 => "C:\OSPanel\userdata\php_upload\phpCB51.tmp"
    1 => "C:\OSPanel\userdata\php_upload\phpCB52.tmp"
  ]
  "error" => array:2 [▼
    0 => 0
    1 => 0
  ]
  "size" => array:2 [▼
    0 => 164808
    1 => 58217
  ]
]

Как понимаю, foreach не запускается, но не понимаю почему (пытался удалить весь код в foreach, а оставить там просто простое Эхо 'Hello!'; , есть такая же ошибка. Я видел те же проблемы в StackOverflow, но все это мне помогло...

У вопроса есть решение - Посмотреть?

Ответы - Ошибка преобразования массива в строку при загрузке нескольких файлов в Laravel 5.8.38 / Array to string conversion error when multiple file upload in Laravel 5.8.38

Является ответом!
Agapini

22.10.2020 10:40:11

Проблема была в первой строке $estate = Estate::create($request->all());

Итак, из Блейда я получаю данные a name="estate_image[] , которые являются массивом, и Laravel пытается добавить массив в ячейку базы данных. В ячейку базы данных cold будет добавлено только строковое значение, и через это у меня была эта ошибка.

Решите эту проблему, удалив этот столбец из базы данных и удалив его из переменной $fillable в основной модели.

Довольно глупая и легкая вещь с моей стороны, но надеюсь, этот ответ кому-то поможет. :-)

Помочь в развитии проекта:
Закрыть X