如何在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.php
protected$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"