尝试读取 null 上的属性“image”

问题描述 投票:0回答:1

这是下面列出的代码

public function update(Request $request, string $id)
{

    // Information validation 
    $request->validate([
        'name' => 'required|max:255',
        'price' => 'required|numeric',
        'category_id' => 'required|numeric'
    ]);
    $menu = Menu::find($id);

    //Validate if a user upload image
    if($request->image){
        $request->validate([
            'image' => 'nullable|file|image|mimes:jpeg,png,jpg|max:5000'
        ]);
        if($menu->image != "noimage.png"){ 
            $imageName = $menu->image;
            unlink(public_path('menu_images').'/'. $imageName);
        }
        $imageName = date('mdYHis').uniqid().'.'.$request->image->extension();
        $request->image->move(public_path('menu_images'), $imageName); 
    } else {
        $imageName = $menu->image;
    }

    $menu->name = $request->name;
    $menu->price = $request->price;
    $menu->image = $imageName;
    $menu->description = $request->description;
    $menu->category_id = $request->category_id;
    $menu->save();
    $request->session()->flash('status', $request->name. ' is updated successfully');
    return redirect('/management/menu');
}

错误是在 else 语句之后抛出的。我在这个 if else 语句中试图做的是,如果图像正在请求中上传,并且菜单中已经有该图像并且它不是默认图像,则将其删除。然后我将新图像移动到 menu_images 文件中。如果没有新的图像,我会使用已经存在的图像。最后一步似乎是引发问题的一步?老实说,我真的很迷失,希望有一个解决方案和解释!谢谢你

php laravel model-view-controller mysqli laravel-blade
1个回答
0
投票
$menu = Menu::find($id);

通过 id 检索菜单。由于

$menu->image
告诉您无法获取
image
null
,所以我们知道
$menu
null
,因此该 id 的菜单不存在。您需要查看 id 的值是什么以及您的系统中是否存在该值。查看如果要更新不存在的菜单 ID 会发生什么情况,如果不存在则是否需要插入它,您还需要查看它是如何检索的,是否连接到正确的数据库等等

© www.soinside.com 2019 - 2024. All rights reserved.