Laravel关联报错:Attempt to read property on int问题求助
Laravel关联模型报错:Attempt to read property on int 解决方法
问题根源
你的代码存在4处关键错误,导致出现Attempt to read property on int报错:
- Content模型
$fillable字段拼写错误:camapaign_id应为campaign_id - Content模型关联方法命名不符合Laravel规范:
belongsTo对应单个模型,方法名应为单数campaign()而非复数campaigns() - Campaign模型
hasMany关联外键错误:应指向Content表的campaign_id而非不存在的content_id - 视图中直接访问外键字段(整数类型),而非通过关联方法获取模型实例
修复步骤
1. 修正Content模型
class Content extends Model { use HasFactory; protected $table = "contents"; // 修正拼写错误 protected $fillable = [ "body", "campaign_id" ]; // 改为单数方法名,对应单个关联模型 public function campaign(){ return $this->belongsTo(Campaign::class, "campaign_id"); } }
2. 修正Campaign模型
class Campaign extends Model { use HasFactory; protected $table = "campaigns"; protected $fillable = [ "ringba_campaign_id", "is_active" ]; // 修正外键指向Content表的campaign_id public function contents(){ return $this->hasMany(Content::class, "campaign_id"); } }
3. 优化控制器查询(可选但推荐)
通过预加载关联避免N+1查询问题,同时在数据库层面完成排序:
public function index(){ $contents = Content::orderBy("created_at")->with('campaign')->get(); return view("Dashboard.Contents.contents", [ "contents" => $contents ]); }
4. 修正视图代码
通过关联方法获取模型实例,使用可选链式调用避免关联为null时报错:
@foreach($contents as $content) {{ $content->campaign?->ringba_campaign_id }} @endforeach
内容的提问来源于stack exchange,提问作者Sakib ovi
相关产品推荐
相关产品推荐

