如何在 Laravel 5.8 中更新产品
How to update a product in Laravel 5.8
我有一个产品要编辑。请看下面的代码。
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->has('image')) {
$image = $request->file('image');
$filename = $image->getClientOriginalName();
$image->move(public_path('images/products'), $filename);
$product->image = $request->file('image')->getClientOriginalName();
}
$product->update();
$product->categories()->sync($request->category);
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') }}
.
.
.
除了图像,一切都变了。我试过了,但是,我没有成功。解决办法是什么?我想更新数据库中的图像。
好的,我现在去数据库,我把图像换成图片,然后我去我的项目,我再次测试了这个。
但它对我没有影响。
我改了
public function update(ProductRequest $request, Product $product)
到
public function update(Request $request, Product $product)
要更新模型,您应该检索它,设置您希望更新的任何属性,然后调用保存方法。请参阅 documentation 中的更新部分。
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->has('image')) {
$image = $request->file('image');
$filename = $image->getClientOriginalName();
$image->move(public_path('images/products'), $filename);
$product->image = $request->file('image')->getClientOriginalName();
}
$product->save();
$product->categories()->sync($request->category);
return redirect()->route('products.index');
}
更新 1
假设您已经调试了上面的内容并且 $request->file('image')->getClientOriginalName()
正在返回预期值,您可能正在模型上使用字段白名单并且没有添加 image 字段加入白名单。确保 image 在模型的 $fillable
数组中。
class Product extends Model
{
protected $fillable = [
'user_id',
'title',
'body',
'price',
...
'image'
];
更新 2
如果 $request->file('image')
返回 null,则表明您的表单未提交文件。确保您的 <form>
元素在标签中包含 enctype="multipart/form-data"
属性。
更新 3
如果您已经在 <form>
元素中包含了必需的 enctype="multipart/form-data"
标签,那么我建议您执行以下操作。
将 dd($request->all());
放在 update(ProductRequest $request, Product $product)
方法的顶部。 Post 表单并检查输出。
如果文件未包含在输出中,请从使用 ProductRequest $request 更改为默认的 Request $request (Illuminate\Http\Request
) 然后再试一次。您的 ProductRequest
class 中可能存在某些问题。
作为一个小小的批评,您可以通过以下方式改进您的代码。
・使用hasFile()
代替has()
。
・使用$product-image = $filename
代替$product->image = $request->file('image')->getClientOriginalName();
。
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"
属性
我有一个产品要编辑。请看下面的代码。
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->has('image')) {
$image = $request->file('image');
$filename = $image->getClientOriginalName();
$image->move(public_path('images/products'), $filename);
$product->image = $request->file('image')->getClientOriginalName();
}
$product->update();
$product->categories()->sync($request->category);
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') }}
.
.
.
除了图像,一切都变了。我试过了,但是,我没有成功。解决办法是什么?我想更新数据库中的图像。
好的,我现在去数据库,我把图像换成图片,然后我去我的项目,我再次测试了这个。
但它对我没有影响。
我改了
public function update(ProductRequest $request, Product $product)
到
public function update(Request $request, Product $product)
要更新模型,您应该检索它,设置您希望更新的任何属性,然后调用保存方法。请参阅 documentation 中的更新部分。
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->has('image')) {
$image = $request->file('image');
$filename = $image->getClientOriginalName();
$image->move(public_path('images/products'), $filename);
$product->image = $request->file('image')->getClientOriginalName();
}
$product->save();
$product->categories()->sync($request->category);
return redirect()->route('products.index');
}
更新 1
假设您已经调试了上面的内容并且 $request->file('image')->getClientOriginalName()
正在返回预期值,您可能正在模型上使用字段白名单并且没有添加 image 字段加入白名单。确保 image 在模型的 $fillable
数组中。
class Product extends Model
{
protected $fillable = [
'user_id',
'title',
'body',
'price',
...
'image'
];
更新 2
如果 $request->file('image')
返回 null,则表明您的表单未提交文件。确保您的 <form>
元素在标签中包含 enctype="multipart/form-data"
属性。
更新 3
如果您已经在 <form>
元素中包含了必需的 enctype="multipart/form-data"
标签,那么我建议您执行以下操作。
将 dd($request->all());
放在 update(ProductRequest $request, Product $product)
方法的顶部。 Post 表单并检查输出。
如果文件未包含在输出中,请从使用 ProductRequest $request 更改为默认的 Request $request (Illuminate\Http\Request
) 然后再试一次。您的 ProductRequest
class 中可能存在某些问题。
作为一个小小的批评,您可以通过以下方式改进您的代码。
・使用hasFile()
代替has()
。
・使用$product-image = $filename
代替$product->image = $request->file('image')->getClientOriginalName();
。
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"
属性