更新图像路径存储laravel

时间:2017-09-05 14:13:08

标签: php laravel eloquent

我正在使用Laravel 5.4并且我有一个注册方法,它将图像存储在项目的公共文件夹中,然后将其路径存储到DB上的项目行中,它现在正在工作:

 public function salvar(Request $request){

   if ($request->hasFile('image')){

    $product = new Product();
    $id = Produto::max('id')+1;

    $file = request()->file('image');
    $directoryImg = $file->storeAs('images/'. $id , 'image.jpg');

    $produto->description= $request->description;
    $produto->cathegory = $request->cathegory;
    $produto->price = $request->price;
    $produto->image = $directoryImg;
    $produto->save();
   }
   else{
    $product = new Product();
    $product = $product->create($request->all());
   }

   \Session::flash('mensage_success', 'Done!');
   return Redirect::to('products/new');
}

问题在于,当我使用另一种方法更新项目寄存器时,我更改的所有信息都会传递到数据库,除了未存储在路径中的图像和数据库中的路径本身。该字段保留方法执行前的值:

public function update($id, Request $request){
    $productEdit = Product::find($id);

    if ($request->hasFile('image')){ 

    $file = request()->file('image');
    $directoryImg = $file->storeAs('images/' . $productEdit->id , 'image.jpg');

    $productEdit->image = $directoryImg;
    $productEdit->description = $request->description;
    $productEdit->cathegory = $request->cathegory;
    $productEdit->price = $request->price;

    $productEdit->save();

    } 
}

return Redirect::to('products/');  

有人可以帮我找到我在这里缺少的东西吗?

1 个答案:

答案 0 :(得分:0)

它通常会保持值相同,不是吗?由于ID保持不变,这意味着图像路径将保持不变,因为图像名称为ID+image.jpg

尝试在更新之前删除旧图像:

File::delete(public_path('images/' . $productEdit->id , 'image.jpg'));