简体   繁体   中英

Laravel : How to save multiple image file to database

I want to save multiple image files with different field in database such as product_image , feature_image , slurp_image . I used following controller method to save the image files

public function store(Request $request)
    {
      $product = new Product();
      if($request->hasFile('product_image'))
                {
                    $file = Input::file('product_image');            
                    $imageName = time().'.'.$request->product_image->getClientOriginalExtension();           
                    $product->product_image = $imageName;
                    $file->move('images/', $imageName);
                }
        if($request->hasFile('feature_image'))
                {
                    $file = Input::file('feature_image');            
                    $imageName = time().'.'.$request->feature_image->getClientOriginalExtension();           
                    $product->feature_image = $imageName;
                    $file->move('images/', $imageName);
                }

        if($request->hasFile('slurp_image'))
                {
                    $file = Input::file('slurp_image');            
                    $imageName = time().'.'.$request->slurp_image->getClientOriginalExtension();           
                    $product->slurp_image = $imageName;
                    $file->move('images/', $imageName);
                }       

 //        dd($product->product_image);
 //       dd($product->feature_image);
 //      dd($product->slurp_image);
         $product->save();
    }

when i dd() the $product->product_image , $product->feature_image , $product->slurp_image i saw different different file name , but after it stored into the database i saw same file stored into database in different different field. anyone help to find out what could be the solution please?

When you're uploading multiple images at once you'd be passing through an array of images.

This is what my controller function has looked like when I've done this previously.

public function multiple_upload() {
  // get the files
  $files = Input::file('images');
  // counting of uploaded images
  $file_count = count($files);
  // start count how many uploaded
  $uploadcount = 0;

  foreach ($files as $file) {
    $rules = array('file' => 'required'); //'required|mimes:png,gif,jpeg,txt,pdf,doc'
    $validator = Validator::make(array('file'=> $file), $rules);
    if($validator->passes()){
      $destinationPath = 'uploads'; // upload folder in public directory
      $filename = $file->getClientOriginalName();
      $upload_success = $file->move($destinationPath, $filename);
      $uploadcount ++;

      // save into database
      $extension = $file->getClientOriginalExtension();
      $entry = new Uploads();
      $entry->mime = $file->getClientMimeType();
      $entry->original_filename = $filename;
      $entry->filename = $file->getFilename().'.'.$extension;
      $entry->save();
    }
  }
  if($uploadcount == $file_count){
    Session::flash('success', 'Upload successfully');
    return Redirect::to('upload');
  } else {
    return Redirect::to('upload')->withInput()->withErrors($validator);
  }
}

In your example, I'd image it would be more like this

       $product = new Product();


    //upload multiple files 
    $files= [];

    if($request->file('leftimage'))   $files[] = $request->file('leftimage');
    if($request->file('Middleimage')) $files[] = $request->file('Middleimage');
    if($request->file('Rightimage'))  $files[] = $request->file('Rightimage');

      foreach($files as $file)
      {
         if(!empty($file))
         {
            $filename[] = $file->getClientOrginalName();
            if(isset($filename)){
            $file->move(base_path().'/frontend/sidimage/',end($filename));
       }
   }
    $product->image1 = $filename[0];
    $product->image2 = $filename[1];
    $product->image3 = $filename[2];

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM