首页 > 解决方案 > 多张图片更新 laravel

问题描述

我有两张相关的表格,一张是一张products桌子,另一张是一张products_photos桌子。表中products_photosidproduct_idfilename。我在编辑产品时尝试编辑多个图像。我得到的错误是

方法Illuminate\Http\Request::photos不存在。

如何一次编辑多个图像?

这就是我创建多个图像的方式:

public function store(Request $request) 
{ 
    foreach ($request->photos as $photo) {
        $filename = $photo->store('public/photos');
        ProductsPhoto::create([
            'product_id' => $product->id,
            'filename' => $filename
        ]);
    } 
    return redirect()->back(); 
}

这就是我编辑多个图像的方式:

$image = Product::with('ProductsPhoto')
    ->where('id', $request->product_id)
    ->first();

if($request->photos('photos')) {
    if(file_exists($image ->photos)){
        unlink($image ->photos);
    }
    $filename = $photos->store('public/photos');
    ProductsPhoto::create([
        'product_id' => $product->id,
        'filename' => $filename
    ]);
} else {
    $image = $photos->store('public/photos');
}

$product = Product::with('ProductsPhoto')
    ->find($request->product_id);

$product->filename = $product->ProductsPhoto[0]->filename;
$product->save();

刀片模板:

<input multiple="multiple" name="photos[]" type="file"> 

标签: phpmysqllaravellaravel-5

解决方案


错误在$request->photos('photos'). 请求类没有“照片”方法。

我想你想做:

if($request->hasFile('photos')) {}

或者

if($request->has('photos')) {}

另外,从您的代码段中:

$image = Product::with('ProductsPhoto')->where('id',$request->product_id)->first();
...

if(file_exists($image ->photos)){
    unlink($image ->photos);
}

变量 $image 是一个 Product 对象,并且您的表中没有photos列,因此$image->photos将始终为空。相反,我认为您的意思是循环$image->ProductsPhoto并获取$each->filename.

但我必须说,你的代码库中有很多错误我建议你真正调试它:

  • 您没有遍历更新中的多个文件
  • 您是否尝试替换所有以前的图像(如果以前和现在有 3 个图像,我发送两个,您是否希望 3 个消失并替换为新的两个?)。因为那也不是很清楚。

在其他人中。


推荐阅读