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

Laravel中Blade@admin权限控制报错:Attempt to read property "id" on int

问题分析与解决方案

错误「Attempt to read property "id" on int」的核心原因是:$this->role返回的是一个整数,而非Role模型的实例,导致调用->id时触发类型错误。

可能的原因及对应解决方法

1. User模型未正确定义与Role的关联关系

如果User模型里没有定义role关联方法,Laravel会将$this->role视为数据库字段直接读取。若users表中存在名为role的整数字段(比如存储角色ID),就会返回整数,进而报错。

解决:
在User模型中添加关联方法:

public function role()
{
    return $this->belongsTo(Role::class);
}

同时确保users表中存储角色关联的字段是role_id(而非role),且该字段是指向roles表id字段的外键。

2. 未预加载关联或关联未正确加载

即使定义了关联,若未预加载role,或者关联数据不存在,也可能导致$this->role返回null或整数(若字段名冲突)。

解决:
修改isposs方法,增加空值判断,避免报错:

public function isposs()
{
    // 先验证关联是否为Role实例,再判断ID
    return $this->role instanceof \App\Models\Role && $this->role->id == 10;
    
    // 或者使用Laravel 8+支持的可选属性访问符简化代码
    // return $this->role?->id == 10;
}

3. 数据库字段命名冲突

如果users表中确实存在role字段(存储整数类型的角色ID),这会和关联方法名冲突,导致Laravel优先读取字段值而非关联模型。

解决:
重命名users表中的role字段为role_id,并确保迁移文件和模型关联匹配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:10:01