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
相关产品推荐
相关产品推荐

