如何在Laravel中定义HasManyThrough关联的反向关系(Teacher→Branch)
实现Teacher模型到Branch模型的反向关联
现有模型/表结构
branch: id - integer department: id - integer teacher: id - integer branch_department_id - integer branch_department: id - integer branch_id - integer department_id - integer
已实现的正向关联
已在Branch模型中通过HasManyThrough实现了到Teacher的关联:
public function teachers() { return $this->hasManyThrough( Teacher::class, BranchDepartment::class, secondKey: 'branch_department_id', ); }
反向关联的实现方法
要让Teacher模型获取所属的Branch,需使用hasOneThrough关联——因为每个Teacher对应唯一的BranchDepartment,而每个BranchDepartment对应唯一的Branch。
在Teacher模型中添加如下方法:
public function branch() { return $this->hasOneThrough( Branch::class, BranchDepartment::class, 'id', // 中间表BranchDepartment关联当前模型的字段(对应Teacher的branch_department_id) 'id', // 目标模型Branch的主键字段 'branch_department_id', // 当前模型Teacher关联中间表的外键字段 'branch_id' // 中间表BranchDepartment关联目标模型Branch的外键字段 ); }
参数说明
- 第一个参数:目标模型
Branch::class - 第二个参数:中间表模型
BranchDepartment::class - 第三个参数:中间表中与当前模型外键匹配的字段(即BranchDepartment的
id,对应Teacher的branch_department_id) - 第四个参数:目标模型的主键字段(Branch的
id) - 第五个参数:当前模型中关联中间表的外键字段(Teacher的
branch_department_id) - 第六个参数:中间表中关联目标模型的外键字段(BranchDepartment的
branch_id)
定义完成后,即可通过$teacher->branch直接获取该教师所属的Branch实例。
内容的提问来源于stack exchange,提问作者MOHAMMAD RASIM
相关产品推荐
相关产品推荐

