I have uploaded multiple images to database already. Now i am trying to display them in my view. while using foreach to loop through images i am getting error – Invalid argument supplied for foreach()
This is my blade
@foreach($coverage as $cove) <tr> <td>{{$loop->iteration}}</td> <td>{{$cove->news1}}</td> <td>{{$cove->news2}}</td> <td>{{$cove->announcement1}}</td> <td>{{$cove->announcement2}}</td> <td> @foreach($cove->gallery as $image) <img src="{{'image/'.$image}}" style="height:200px;width:200px;"></td> @endforeach <td> <a href="{{route('edit',$cove->id)}}" class="btn btn-primary" style="display: inline-block">Edit</a> <a onclick="alert('Do you want to delete')" href="{{route('delete',$cove->id)}}" class="btn btn-danger" style="display:inline-block">Delete</a> </td> </tr> @endforeach </tbody>
This is my store of controller
public function store(Request $request) { $coverage = new coverage(); $coverage->news1 = $request->news1; $coverage->news2 = $request->news2; $coverage->announcement1 = $request->announcement1; $coverage->announcement2 = $request->announcement2; $input = $request->all(); $gallery = array(); if ($files = $request->file('gallery')) { foreach ($files as $file) { $name = $file->getClientOriginalName(); $file->move('image', $name); $gallery[] = $name; } } $coverage->gallery = json_encode($gallery); $coveragesave = $coverage->save(); if ($coveragesave) { return redirect()->back()->with("success", "The record has been stored"); } else { return redirect()->back()->with("error", "There is an error"); } }
This is how i have defined coverage table
public function up() { Schema::create('coverages', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('news1'); $table->string('news2'); $table->string('announcement1'); $table->string('announcement2'); $table->binary('gallery')->nullable(); $table->timestamps(); }); }
on dumping $coverage->gallery in store controller i receive this:
“[“70187225_683426155503359_4595847093867773952_n.jpg”,”70744555_683429382169703_8264311195482193920_n.jpg”]”
In database the same is saved as BLOB
Advertisement
Answer
Because $coverage->gallery
is not an Array. Edit: I saw that your gallery column is type binary. I don’t know if it is possible to save a json_encoded String to binary column.
I would also reccommend you to use another table for gallery items with relationship to your coverage entries. Take a look at Eloquent Relationships
If you want to keep your current (and dirty) procedure:
If you store it with json_econde()
you’ll have to decode it first if you want to loop over it.
Try changing gallery column to string and then do @foreach(json_decode($cove->gallery, true) as $image)