Array to string conversion error when multiple file upload in Laravel 5.8.38

1.5k views Asked by At

I have an Array to string conversion error, when trying to realize multiple upload files function in Laravel 5.8.38 Cant find any decision about it

In blade form I have simple thing:

<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>

In store function I have:

The function creates an estate(one property). If user adds some images for it, we adds this images in local path and adds them in database

if I comment $estate = Estate::create($request->all()); it works fine but in this case estate doesnt adds in database

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();
        }
    }
}

Am array I have from input

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
  ]
]

As understand, foreach doesnt start, but dont understand why (tried to delete all code in foreach, and leave there just simple echo 'Hello!'; , have the same error. Saw the same problems in StackOverflow, but any of it helped me...

1

There are 1 answers

0
Agapini On BEST ANSWER

The problem was in first line $estate = Estate::create($request->all());

So, from blade I receive a name="estate_image[] data which is an array, and Laravel tried to adds an array in database cell. In database cell cold be added just string value and through that, I had that error.

Solve it, by deleting this column from database and deleting this from $fillable variable in main model.

Quite stupid and easy thing from me, but hope, this answer helps someone. :-)