You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.6出现"Trying to get property of non-object"错误求助

解决Laravel 5.6中"Trying to get property of non-object"错误

我一眼就揪出了问题的核心,咱们一步步拆解排查:

1. 最直接的错误:变量引用写法出错

你控制器里的这行代码是罪魁祸首:

$member = Member::find('$id'); //Test

在PHP里,单引号包裹的内容会被当作纯字符串字面量,这里的$id并没有被解析成你传入的id值,而是变成了字符串'$id'。也就是说你在尝试查找数据库中id等于'$id'的Member记录——这显然不存在,所以$member会返回null。当你接着访问$member->name时,自然就会抛出"Trying to get property of non-object"错误,因为你在试图访问null(非对象)的属性。

修复方法:去掉单引号,直接使用变量:

$member = Member::find($id);

2. 可选优化:利用Laravel的隐式路由绑定

你的路由定义其实已经用到了Laravel的隐式路由绑定特性,但控制器参数没跟上:

Route::get('members/{member}', 'MemberController@show');

你可以把控制器方法改成这样,让Laravel自动帮你完成模型查找:

public function show(Member $member) {
    // 此时$member已经是对应id的Member模型实例,如果找不到记录,Laravel会自动返回404页面
    echo $member->name;
    exit;
    return view('members/show', ['member' => $member]);
}

这样你不用手动调用Member::find(),代码更简洁,还能自动处理找不到记录的场景。

3. 额外建议:增加记录存在性判断

如果还是想手动查找记录,建议加上存在性校验,避免找不到记录时的报错:

public function show($id) {
    $member = Member::find($id);
    // 如果找不到记录,返回404或者自定义提示
    if (!$member) {
        abort(404, 'Member not found');
    }
    echo $member->name;
    exit;
    return view('members/show', ['id' => $id, 'member' => $member]);
}

按照上面的方法修改后,访问Some_url/members/1就能正常显示name字段啦~

内容的提问来源于stack exchange,提问作者jproux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:41:05