如何在Laravel 5.8中更新产品
我有一个要编辑的产品。请参阅以下代码如何在Laravel 5.8中更新产品,laravel,laravel-5.8,Laravel,Laravel 5.8,我有一个要编辑的产品。请参阅以下代码 公共功能更新(ProductRequest$request,Product$Product) { $product->user\u id=auth()->user()->id; $product->title=$request->title; $product->body=$request->body; $product->price=$request->price; 如果($request->has('image')){ $image=$request->
公共功能更新(ProductRequest$request,Product$Product)
{
$product->user\u id=auth()->user()->id;
$product->title=$request->title;
$product->body=$request->body;
$product->price=$request->price;
如果($request->has('image')){
$image=$request->file('image');
$filename=$image->getClientOriginalName();
$image->move(公共路径('images/products'),$filename);
$product->image=$request->file('image')->getClientOriginalName();
}
$product->update();
$product->categories()->sync($request->categories);
return redirect()->route('products.index');
}
product.blade.php
<form class="form-horizontal" action="{{ route('products.update', $product->id) }}" method="post" enctype="multipart/form-data">
{{ csrf_field() }}
{{ method_field('PATCH') }}
.
.
.
到
要更新模型,应该检索它,设置要更新的任何属性,然后调用save方法。请参阅中的更新部分
更新1 假设您已经调试了上述内容,并且
$request->file('image')->getClientOriginalName()
正在返回预期值,那么您可能正在模型上使用字段白名单,并且没有将image字段添加到白名单中。确保模型上的$filleble
数组中有图像
class Product extends Model
{
protected $fillable = [
'user_id',
'title',
'body',
'price',
...
'image'
];
更新2 如果
$request->file('image')
返回null,则表明您的表单没有提交文件。确保您的
元素在标记中包含enctype=“multipart/form data”
属性
更新3 如果您已经在
元素中包含了所需的enctype=“multipart/form data”
标记,那么我建议您执行以下操作
放置dd($request->all())代码>位于更新(ProductRequest$request,Product$Product)
方法的顶部。张贴表单并检查输出
如果输出中未包含该文件,请从使用ProductRequest$request更改为默认的request$request(Lightning\Http\request
),然后重试。您的ProductRequest
类中可能存在导致问题的内容
作为一个小评论,您可以通过以下方式改进代码 ・使用
hasFile()
而不是has()
・使用$product image=$filename
而不是$product->image=$request->file('image')->getClientOriginalName()代码>
要更新模型,应该检索它,设置要更新的任何属性,然后调用save方法。请参阅中的更新部分
更新1
假设您已经调试了上述内容,并且$request->file('image')->getClientOriginalName()
正在返回预期值,那么您可能正在模型上使用字段白名单,并且没有将image字段添加到白名单中。确保模型上的$filleble
数组中有图像
class Product extends Model
{
protected $fillable = [
'user_id',
'title',
'body',
'price',
...
'image'
];
更新2
如果$request->file('image')
返回null,则表明您的表单没有提交文件。确保您的
元素在标记中包含enctype=“multipart/form data”
属性
更新3
如果您已经在
元素中包含了所需的enctype=“multipart/form data”
标记,那么我建议您执行以下操作
放置dd($request->all())代码>位于更新(ProductRequest$request,Product$Product)
方法的顶部。张贴表单并检查输出
如果输出中未包含该文件,请从使用ProductRequest$request更改为默认的request$request(Lightning\Http\request
),然后重试。您的ProductRequest
类中可能存在导致问题的内容
作为一个小评论,您可以通过以下方式改进代码
・使用hasFile()
而不是has()
・使用$product image=$filename
而不是$product->image=$request->file('image')->getClientOriginalName()代码>
确保你有
enctype="multipart/form-data"
属性确保您的
enctype="multipart/form-data"
属性您是否检查了$request->has('image')是否为真?是的,我检查了$request->has('image')
是否为真。您是如何调试它的?是否执行$request->file('image')->getClientOriginalName()代码>返回期望值?乍一看,您应该使用save()
而不是update()
我更改了它,但我在数据库中看到,图像没有更改…@MahmoudKhosravi您可以发布用于上传图像的表单的刀片模板吗?您是否检查了$request->has('image')是否为真,我检查了$request->has('image')
是否正确。您是如何调试它的?是否执行$request->file('image')->getClientOriginalName()
返回期望值?乍一看,您似乎应该使用save()
而不是update()
我更改了它,但我在数据库中看到,图像没有更改…@MahmoudKhosravi您可以发布用于上载图像的表单的刀片模板吗?数据库中的图像没有更改。@MahmoudKhosravi您需要逐行调试您的方法,以确保$image
返回值。您是否有可能在产品模型上设置了一个白名单(protected$filleble=[];
),但没有向其中添加image
字段?我已经输入了Product.phpprotected$filleble=['user\u id','title','body','image','price',slug',viewCount commentCount]
@MahmoudKhosravi在这种情况下,请通过添加dd($request->file('image')->getClientOrig来转储文件名值
public function update(ProductRequest $request, Product $product)
{
$product->user_id = auth()->user()->id;
$product->title = $request->title;
$product->body = $request->body;
$product->price = $request->price;
if ($request->hasFile('image')) {
$image = $request->file('image');
$filename = $image->getClientOriginalName();
$image->move(public_path('images/products'), $filename);
$product->image = $filename;
}
$product->save();
$product->categories()->sync($request->category);
return redirect()->route('products.index');
}
enctype="multipart/form-data"