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

Laravel中无法获取多个hasMany关联数据的问题求助

问题描述

我想获取User表的数据,同时拉取education、documents、references、skills这4个关联表的完整数据。执行以下查询语句后,仅返回了User表的数据,尽管关联表中存在匹配的数据,却未返回任何关联数据。查询结果截图如下:

控制器代码

$u = User::where('id', $id)->with(['education','documents','references','skills'])->get();
dd($u);

User模型代码

public function education(){
    return $this->hasMany(StaffEducation::class,'id','user_id');
}
public function documents(){
    return $this->hasMany(StaffDocuments::class,'id','user_id');
}
public function references(){
    return $this->hasMany(StaffReferences::class,'id','user_id');
}
public function skills(){
    return $this->hasMany(StaffSkills::class,'id','user_id');
}

查询结果截图


解决方案

问题根源是你在hasMany关联中颠倒了外键和本地主键的参数顺序。

Laravel的hasMany方法参数规则为:
hasMany(关联模型类名, 关联表的外键字段名, 当前模型的主键字段名)

你之前把关联表的主键id作为外键参数,把user_id作为本地主键参数,这完全搞反了。修正后的关联代码如下:

public function education(){
    return $this->hasMany(StaffEducation::class, 'user_id');
}
public function documents(){
    return $this->hasMany(StaffDocuments::class, 'user_id');
}
public function references(){
    return $this->hasMany(StaffReferences::class, 'user_id');
}
public function skills(){
    return $this->hasMany(StaffSkills::class, 'user_id');
}

注:因为当前User模型的主键默认是id,所以第三个参数可以省略不写。

修改后重新执行查询,就能正确获取到关联表的匹配数据了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:46:26