我有一个要编辑的产品。请参见以下代码。
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)
答案 0 :(得分:1)
要更新模型,应检索它,设置要更新的所有属性,然后调用save方法。请参阅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');
}
假设您已调试上述内容,并且$request->file('image')->getClientOriginalName()
返回了期望值,则可能是您在模型上使用了字段白名单,而没有将 image 字段添加到白名单中。确保图像在模型的$fillable
数组中。
class Product extends Model
{
protected $fillable = [
'user_id',
'title',
'body',
'price',
...
'image'
];
如果$request->file('image')
返回null,则表明您的表单未提交文件。确保您的<form>
元素的标记中包含enctype="multipart/form-data"
属性。
如果您已经在enctype="multipart/form-data"
元素中包含了必需的<form>
标签,那么我建议您执行以下操作。
将dd($request->all());
放在update(ProductRequest $request, Product $product)
方法的顶部。发布表单并检查输出。
如果文件未包含在输出中,请从使用 ProductRequest $ request 更改为默认的 Request $ request (Illuminate\Http\Request
),然后重试。您的ProductRequest
类中可能有引起问题的东西。
作为一个小批判,您可以通过以下方式改进代码。
・使用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');
}
答案 1 :(得分:0)
确保您拥有
enctype="multipart/form-data"
财产