Taping's avatar

How to upload and display multiple image in laravel?

Hello! I have a huge problem that I have been dealing with for 2 weeks now. I managed to upload a single image and display it however, I got stuck in multiple images. I have tried everything but it didn't work at all. I would be very grateful if I could solve this problem. Thanks in advance

Models:

class Listing extends Model{
use HasFactory;
protected $fillable = ['title','description','tags','import','logo','imgaddons'];
}

Controller:

       public function store(Request $request){
       $formFields = $request->validate([
        'title' => 'required',
        'tags' => 'required',
        'description' =>'required',
        'import'=>'required',
        'imgaddons'=>'required',
       ]);

 //Multiple imgages
 if($request->hasfile('imgaddons')) {
foreach($request->file('imgaddons') as $file)
{
    $name = $file->getClientOriginalName();
    $file->store('imgaddons','public',$name); 
    $imgData[] = $name;
    $formFields['imgaddons'] = implode(',',$imgData);
    $formFields['imgaddons']->save();
 
}

 //Single img(works)
 if($request->hasFile('logo'))
       {
        $formFields['logo'] = $request->file('logo')->store('logo','public');
       }

       Listing::create($formFields);
       return redirect('/');
}
}
   html (input):
    <div id="addnos-label">
      <input class="form-control" type="file" id="images" name="imgaddons[]" multiple>
    </div>

html(display for multiple images):

 @foreach ($listing->imgaddons as $item)
  <img id="heal-elvui" class="img-fluid" src="{{$item ? asset('storage/' . $item) : asset('/images/zoli.jpg')}}" 
  align="right">
  @endforeach

Database:

   public function up(){
    Schema::create('listings', function (Blueprint $table) {
        $table->id();
        $table->string('title');
        $table->string('tags');
        $table->string('description');
        $table->text('import');
        $table->string('logo')->nullable();
        $table->text('imgaddons')->nullable();
        $table->timestamps();
    });
}
0 likes
4 replies
Taping's avatar

So, my main problem isn't the display because I can't even store Multiple images in my database, however, it saves locally to public/storage/imgaddons, but It doesn't save path files to my database

     $files = $request->file('imgaddons');
      if($request->hasFile('imgaddons'))
       {
         foreach ($files as $formFields) {
         $formFields->store('imgaddons','public');
         }
       }
       Listing::create($formFields);
       return redirect('/');

So I want to save files in a database like: Img1.png,img2.jpg,img3.jpg,img4.jpg as a string and then I can make an HTML tags to display all the images.

priyalaks's avatar

Can you dd and show - whats there in $formFields in your store controller before inserting into ur db ?

Taping's avatar

I changed it a bit

if($request->hasFile('imgaddons[]'){

$formFields = $request->file('imgaddons')->store('imgaddons','public');

}

dd:

^ array:5 [▼ "title" => "TEST TEST TEST" "tags" => "Opie" "description" => "asd asd asd asd asd asd" "import" => "testosngoerngopergoergr" "imgaddons" => array:3 [▼ 0 => Illuminate\Http\UploadedFile {#289 ▶} 1 => Illuminate\Http\UploadedFile {#290 ▶} 2 => Illuminate\Http\UploadedFile {#291 ▶} ] ]

Please or to participate in this conversation.