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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:55:37