【问题标题】:how can i update multiple images in laravel如何在 laravel 中更新多个图像
【发布时间】:2020-08-24 20:58:18
【问题描述】:

我想更新 laravel 上的多张图片,更新后旧的图片会自动从存储中删除。

我尝试使用下面的更新方法来实现它:

public function update(Request $request, $id)
{

    $listing = Listing::where('id', $id)->first();
    
    $listing->title = $request->get('title');
    $listing->price = $request->get('price');
    $listing->address = $request->get('address');
    $listing->rooms = $request->get('rooms');
    $listing->city = $request->get('city');
    $listing->state = $request->get('state');
    $listing->zip_code = $request->get('zip_code');
    $listing->area = $request->get('area');
    $listing->balcony = $request->get('balcony');
    $listing->bedrooms = $request->get('bedrooms');
    $listing->bathrooms = $request->get('bathrooms');
    $listing->toilet = $request->get('toilet');
    $listing->bathroom_type = $request->get('bathroom_type');
    $listing->kitchen = $request->get('kitchen');
    $listing->parking_space = $request->get('parking_space');
    $listing->description = $request->get('description');
    $listing->featured = $request->get('featured');
    $listing->status = $request->get('status');
    $listing->type = $request->get('type');
    $listing->water_supply = $request->get('water_supply');
    $listing->power_supply = $request->get('power_supply');

    if($request->hasFile('images') != ''){    
        
        $listingImage = ListingImage::findOrFail($id);    
        //add new image
        foreach ($request->file('images') as $image) {
            $image = $request->file('images');
            $imageName = time().'.'.$image->getClientOriginalExtension();
    
            $oldImagepath = $listingImage->image_path;
            // Update the database
            $listingImage->image_path = $imageName;
            // Delete the old photo
            Storage::delete($oldImagepath);
            $listingImage->save();
            $image->move(public_path('images/listing/'.$listing->id),$imageName);
        }
    }

    $listing->save();
    return redirect('/home')->with('success', 'Listing updated!');
}

但我得到了错误 错误 调用数组上的成员函数 getClientOriginalExtension()。我的图像存储在 ListingImage 模型中,并且我已将默认文件系统配置为

'local' => [
            'driver' => 'local',
            'root' => public_path('images/listing/'),
        

我可以采取哪些步骤来更新我的 laravel 应用程序中的新图像

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    foreach loop 中,您使用的是错误的$request->file('images'),您将其分配给$image 变量,它应该是:

    foreach ($request->file('images') as $image) {
             // remove this line of code
             $image = $request->file('images');
            $imageName = time().'.'.$image->getClientOriginalExtension();
    
            $oldImagepath = $listingImage->image_path;
            // Update the database
            $listingImage->image_path = $imageName;
            // Delete the old photo
            Storage::delete($oldImagepath);
            $listingImage->save();
            $image->move(public_path('images/listing/'.$listing->id),$imageName);
        }
    

    【讨论】:

    • 我尝试删除 foreach 循环,但仍然遇到同样的错误。请你解释一下
    • no 不需要删除 foreach 循环,只删除 $image = $request->file('images') 行
    • 感谢修复了对数组上的成员函数 getClientOriginalExtension() 的错误调用问题,但我的新图像没有显示,我仍然得到旧图像
    • 您是否在数据库中获取新图像?
    • 让我在答案中向您展示一些示例代码,您可以自己定制它。
    【解决方案2】:

    首先你改变$image->getClientOriginalExtension()而不是$image->file('images)->getClientOriginalExtension()

    第二次你保存多张图片在这样的列["first_image.jpeg", "second_image.jpeg"]

    $images = [];
    foreach ($request->file('images') as $image) {
          $imageName = time().'.'.$image->getClientOriginalExtension();
          //save images in public/images/listing folder
          $image->move(public_path('images/listing/'), $imageName);
          // Delete the old photo
          $oldImagepath = $listingImage->image_path;
          Storage::delete($oldImagepath);
          $images[] = $imageName;
          $json_encode = json_encode($images);
          $listingImage->image_path = $json_encode;
    }
    
    $listingImage->save();
    

    【讨论】:

    • image_path 未存储在数据库中。只存储了 imageName
    • 我看到了这个image_path,我认为这是图像路径。尝试使用我的代码。它工作正常。
    • foreach 之前检查dd($listingImage); 并显示结果;
    猜你喜欢
    • 2020-03-03
    • 2023-01-27
    • 2021-08-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    相关资源
    最近更新 更多