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

Laravel报错:Attempt to read property 'name' on int 问题求助

错误原因分析
  1. 混淆外键字段与关联关系:user_id是数据库中存储的整数类型外键,直接调用$item->user_id得到的是数字值,而非User模型实例,自然无法读取name属性。
  2. 关联方法与操作模型不匹配:你在Work模型中定义了关联,但控制器实际查询的是Post模型,存在模型混淆;同时关联方法命名为User()(首字母大写),不符合Laravel驼峰小写的关联调用约定。
  3. 变量传递与循环命名不一致:控制器将$posts以post为键名传递给视图,视图循环时使用单数$post,虽不直接引发当前错误,但易导致逻辑混乱。
解决方案

步骤1:修正模型关联(核心)

如果控制器操作的是Post模型,需在Post模型中定义正确的关联方法(若实际业务是Work模型,则控制器应改为Work::all()):

// app/Models/Post.php
public function user()
{
    return $this->belongsTo(User::class);
}

注:关联方法名使用小写user,Laravel会自动匹配外键user_id,符合框架约定。

步骤2:修正视图中的关联调用

将视图中访问外键的代码改为调用关联关系:

<tbody>
@foreach ($posts as $item)
  <tr class="border-b dark:border-neutral-500">
     <td class="whitespace-nowrap px-6 py-4 font-medium">{{ $item->id}}</td>
     <td class="whitespace-nowrap px-6 py-4">{{ $item->user?->name}}</td>
     <td class="whitespace-nowrap px-6 py-4">{{ $item->slug}}</td>
  </tr>
@endforeach
</tbody>
  • 使用$item->user调用关联关系,获取User模型实例后再访问name;
  • 加?->可选链运算符,避免因user_id为空导致的报错(兼容Laravel 8+)。

步骤3:优化控制器查询(避免N+1问题)

在查询时预加载关联关系,提升性能,同时修正变量传递的键名:

// 控制器代码
$posts = Post::with('user')->get();
return view('home', ['posts' => $posts]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:05:14