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

Laravel 11报错:Attempt to read property "name" on int 求助

排查“Attempt to read property "name" on int”错误步骤

这个错误的核心是你在整数类型的值上调用了name属性,大概率是Blade模板里误将外键ID(比如category_id)当成关联模型对象(category)来使用,或者关联定义/预加载存在问题,按以下步骤排查:

1. 检查Blade模板代码

这是最常见的出错点,确认你没有写成:

{{ $product->category_id->name }}

正确的写法应该是调用关联关系名称:

{{ $product->category->name }}
{{ $product->subcategory->name }}

如果有部分产品的关联可能为空,建议使用可选链式调用避免后续报错:

{{ $product->category?->name }}
{{ $product->subcategory?->name }}

2. 验证模型关联定义

打开Product模型,确认关联关系的外键配置正确:

// app/Models/Product.php
public function category()
{
    // 若products表的外键是category_id,且Category模型主键是id,可省略参数
    return $this->belongsTo(Category::class, 'category_id', 'id');
}

public function subcategory()
{
    return $this->belongsTo(Subcategory::class, 'subcategory_id', 'id');
}

注意:如果Category/Subcategory模型使用了非默认主键(比如uuid或自定义字段),必须在belongsTo的第三个参数指定对应主键字段。

3. 确认预加载是否生效

在控制器中临时添加调试代码,查看预加载后的模型数据:

// 控制器方法内
$products = Product::with(['category', 'subcategory'])->get();
dd($products);

查看输出结果,每个Product对象中应该包含category和subcategory的模型实例(而非单纯的ID)。如果看不到这两个关联对象,说明关联关系定义错误,导致预加载失败。

4. 检查数据表外键约束

打开products表的迁移文件,确认外键字段的类型与关联表的主键类型一致:

// 示例迁移代码
Schema::create('products', function (Blueprint $table) {
    $table->id();
    $table->foreignId('category_id')->constrained(); // 确保category_id与categories表的id类型匹配
    $table->foreignId('subcategory_id')->constrained();
    // 其他字段...
});

如果关联表的主键不是unsignedBigInteger(比如是integer),需要显式指定外键类型:

$table->integer('category_id')->unsigned();
$table->foreign('category_id')->references('id')->on('categories');

内容的提问来源于stack exchange,提问作者Michael Grznár

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 05:12:12