我正在使用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/');
有人可以帮我找到我在这里缺少的东西吗?
答案 0 :(得分:0)
它通常会保持值相同,不是吗?由于ID保持不变,这意味着图像路径将保持不变,因为图像名称为ID+image.jpg
。
尝试在更新之前删除旧图像:
File::delete(public_path('images/' . $productEdit->id , 'image.jpg'));