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

Laravel新手求助:展示带创建用户的帖子时报错Trying to get property 'name' of non-object

搞定Laravel视图中「Trying to get property 'name' of non-object」错误的方法

嘿,作为Laravel新手碰到这个问题很正常,别慌,咱们一步步排查解决:

第一步:先确认模型关联配置对不对

首先得确保User.php和Post.php里的关联关系写对了,这是基础:

User.php(用户模型)

一个用户能写多篇帖子,所以要定义一对多的关联:

public function posts()
{
    return $this->hasMany(Post::class);
}

Post.php(帖子模型)

每篇帖子都属于一个用户,所以是属于关联:

public function user()
{
    return $this->belongsTo(User::class);
}

划重点:你的posts数据库表必须有user_id字段(作为外键),而且类型要和users表的id字段匹配(比如都是unsigned bigint),不然关联会失效。

第二步:控制器里正确查询并预加载关联数据

在PostController.php里查帖子的时候,记得预加载用户关联,既能避免N+1查询问题,也能确保关联数据正确获取:

public function index()
{
    // 预加载user关联,把帖子和对应的用户一起查出来
    $posts = Post::with('user')->get();
    
    // 要是你想直接过滤掉没有关联用户的帖子,可以改成下面这句:
    // $posts = Post::has('user')->with('user')->get();
    
    return view('Home2', compact('posts'));
}

第三步:视图里做容错处理(关键!)

就算前面都配置好了,也可能存在帖子没关联用户的情况(比如数据异常),所以在Home2.blade.php里一定要先判断$post->user是否存在,再去拿name属性:

@foreach($posts as $post)
    <div class="post-item">
        <h4>{{ $post->title }}</h4>
        <p>{{ $post->content }}</p>
        <!-- 第一种容错写法:三元表达式判断 -->
        <p>作者:{{ $post->user ? $post->user->name : '匿名用户' }}</p>
        <!-- 第二种写法:用Laravel的optional辅助函数,更优雅 -->
        <p>作者:{{ optional($post->user)->name ?? '匿名用户' }}</p>
    </div>
@endforeach

第四步:检查路由是否正确

最后确认web.php里的路由是不是指向了正确的控制器方法:

Route::get('/home2', [PostController::class, 'index'])->name('home2');

额外排查点

  • 去数据库里看看posts表的user_id字段有没有值,有没有存在users表里找不到的ID,要是有这种无效数据,也会触发这个错误。
  • 要是你的用户表主键不是id,或者帖子表的外键不是user_id,得在关联方法里手动指定:
    比如Post.php里:
    public function user()
    {
        return $this->belongsTo(User::class, '你的外键字段名', '用户表主键字段名');
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:25:42