【问题标题】:how to update multiple images in laravel?如何更新laravel中的多个图像?
【发布时间】:2020-03-03 17:14:11
【问题描述】:

我想为具有多个图像的产品存储图像问题是我想更新图像问题是图像已更新但条目永远不会进入数据库。而是将相同的条目存储两次。

if($request->hasfile('image')) {           //here i got images
    $file = $request->file('image');
    $file_count= count($file);              //for updating multiple images 

    for ($i=0; $i < $file_count; $i++) { 

        $imagesize  = $file[$i]->getClientSize();
        $imageexten = $file[$i]->getClientOriginalExtension();
        $product_image_count = count($request->productimagename);

        for ($i=0; $i < $product_image_count; $i++) { 
            if($file_count != 1) { 
                $new_name = $request->productimagename[$i].$i.".".$imageexten;
            } else {
                $new_name = $request->productimagename[$i].".".$imageexten;
            }
            $product_image_path ='images/frontendimage/product_image/'.$new_name;
            Image::make($file[$i])->save($product_image_path);    

            foreach ($product->images as $key => $value) {       
                product_image::find($value->id)->where('product_id','=',$product->id)
                ->update(['image_name'=> $new_name,'image_url'=>$product_image_path,
                    'modified_by'=>Auth::user()->id]);
            } 
        }
    } 
}

【问题讨论】:

  • foreach循环有什么用?怎么知道product表要更新什么值?
  • 您想将多个 product_image 记录更新为相同的 'image_url' 和 'image_name' ?
  • 不要在 foreach 中使用更新查询...更好地准备查询并使用单个更新。 #offtop
  • @lagbox 是的,我想同时更新 image_url 和 image_name

标签: php laravel image-uploading


【解决方案1】:
if ($request->has('unit_images'))
        {
            $promotion = [];
            foreach ($request->file('unit_images') as $key => $file) {


                $filenameWithExt = $file->getClientOriginalName();

                $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);

                $extension = $file->getClientOriginalExtension();

                $fileNameToStore = uniqid() . '.' . $extension;

                $path = $file->storeAs("$directory/unit_images/$b/$unit_num", $fileNameToStore, 'public');

                $this->validate($request, [
                    'images' => 'dimensions:min_width=250,min_height=250'
                ]);

                $b_id = $request->building_name;

               $unitimg = UnitImage::where('unit_id', '=', $unit_store_id)->get();

               $new=strlen($unitimg);

                if ($new!='2') {

                    foreach ($unitimg as $get2) {

                        $get2->delete();
                    }

                    $nn=New UnitImage();
                    $nn->images = $path;
                    $nn->unit_id = $unit_store_id;
                    $nn->save();
                }

                if ($new=='2') {

                         $nn = New UnitImage();
                         $nn->images = $path;
                         $nn->unit_id = $unit_store_id;
                         $nn->save();
                }

            }

        }

【讨论】:

    【解决方案2】:

    输入字段 -

    <input type="file" name="images[]"  class="form-control"  multiple required />
    

    控制器 -

    $imagesName = array();
    $imagesPath = array();
    
    if($files=$request->file('images')){
        foreach (Input::file('images') as $file) {
            $name           = strtolower($file->getClientOriginalName());
            $name           = preg_replace('/\s+/', '_', $name);
            $img            = Image::make($file);
    
            $path           = 'your/path/'.$name;
    
            $img->save($path);
    
            $imagesName[]   = $name;
            $imagesPath[]   = $path;
        }
    }
    

    这会将多张图片上传到您的服务器,您将从$imagesName[] 获取上传的图片名称,并从$imagesPath[] 获取路径。

    现在您可以根据您的 BD 结构使用这些。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-27
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      • 1970-01-01
      相关资源
      最近更新 更多