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

Laravel错误:Attempt to read property "name" on int 求助解决

问题排查与解决

1. 视图关联调用错误

Blade视图中你写了$item->dataguru->name,但ReportData模型里的关联方法是guru(),正确调用应为$item->guru->name,这是直接的错误点。

2. 关联方法与数据库字段名冲突(核心原因)

你的ReportData模型fillable数组包含perusahaan、siswa、wilayah、guru、jurusan这些字段,同时关联方法也用了相同名字。当调用$item->guru时,Laravel会优先返回数据库中存储的整数字段值(外键ID),而非关联的DataGuru对象,导致你试图在整数上访问name属性,触发「Attempt to read property "name" on int」错误。

解决方法

方案一:修改关联方法名避免冲突

修改ReportData模型的关联方法名,同时指定外键:

class ReportData extends Model
{
    use HasFactory;
    use SoftDeletes;

    protected $fillable = [
        "perusahaan",
        "siswa",
        "wilayah",
        "guru",
        "jurusan",
    ];

    public function perusahaanRelation()
    {
        return $this->belongsTo(Perusahaan::class, 'perusahaan');
    }
    
    public function wilayahRelation()
    {
        return $this->belongsTo(Perusahaan::class, 'wilayah');
    }

    public function siswaRelation()
    {
        return $this->belongsTo(DataSiswa::class, 'siswa');
    }

    public function guruRelation()
    {
        return $this->belongsTo(DataGuru::class, 'guru');
    }

    public function jurusanRelation()
    {
        return $this->belongsTo(Jurusan::class, 'jurusan');
    }
}

控制器更新预加载关联名:

$reportdata = ReportData::with('siswaRelation', 'guruRelation', 'perusahaanRelation', 'jurusanRelation', 'wilayahRelation')->get();

视图对应修改调用:

<td>{{ $item->siswaRelation->name }}</td>
<td>{{ $item->perusahaanRelation->name }}</td>
<td>{{ $item->perusahaanRelation->wilayah  }}</td>
<td>{{ $item->guruRelation->name }}</td>
<td>{{ $item->jurusanRelation->jurusan  }}</td>

方案二:修改数据库字段名(推荐,符合Laravel最佳实践)

将ReportData表的外键字段改为xxx_id格式(如guru改为guru_id),Laravel会自动识别外键:

  1. 生成迁移修改字段名:
Schema::table('report_data', function (Blueprint $table) {
    $table->renameColumn('perusahaan', 'perusahaan_id');
    $table->renameColumn('siswa', 'siswa_id');
    $table->renameColumn('wilayah', 'wilayah_id');
    $table->renameColumn('guru', 'guru_id');
    $table->renameColumn('jurusan', 'jurusan_id');
});
  1. 更新ReportData模型:
class ReportData extends Model
{
    use HasFactory;
    use SoftDeletes;

    protected $fillable = [
        "perusahaan_id",
        "siswa_id",
        "wilayah_id",
        "guru_id",
        "jurusan_id",
    ];

    public function perusahaan()
    {
        return $this->belongsTo(Perusahaan::class);
    }
    
    public function wilayah()
    {
        return $this->belongsTo(Perusahaan::class);
    }

    public function siswa()
    {
        return $this->belongsTo(DataSiswa::class);
    }

    public function guru()
    {
        return $this->belongsTo(DataGuru::class);
    }

    public function jurusan()
    {
        return $this->belongsTo(Jurusan::class);
    }
}
  1. 仅需修正视图中的$item->dataguru->name为$item->guru->name即可,控制器无需修改。

3. 处理关联记录不存在的情况

为避免关联记录不存在时触发空属性错误,可使用optional()或空合并运算符:

<td>{{ optional($item->siswa)->name ?? '-' }}</td>
<td>{{ optional($item->perusahaan)->name ?? '-' }}</td>
<td>{{ optional($item->perusahaan)->wilayah ?? '-' }}</td>
<td>{{ optional($item->guru)->name ?? '-' }}</td>
<td>{{ optional($item->jurusan)->jurusan ?? '-' }}</td>

内容的提问来源于stack exchange,提问作者M Idham Khaliq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:06:12