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

如何在Laravel中使用Eloquent的hasOneThrough/hasManyThrough关联3张表

问题原因

你原来的代码存在两个核心错误:

  1. 关联命名混乱:方法名departments和返回的subjectlist关联类型完全不匹配,容易导致逻辑调用错误
  2. hasOneThrough参数完全不符合三张表的关联逻辑:你的三张表关联链是 subjects → course → departments,你把中间模型和远程目标模型填反了,外键参数也对应不上表结构

解决步骤

1. 修正关联定义

你需要在科目模型(subjectlist)中新增部门的远程关联,用来输出你要的department嵌套字段:

// 科目模型(subjectlist)中新增如下关联
public function department()
{
    return $this->hasOneThrough(
        Department::class, // 最终要获取的远程模型:部门
        Course::class, // 中间关联模型:课程
        'id', // 中间表course的主键,和科目表的course_id关联
        'id', // 远程表departments的主键,和course表的department_id关联
        'course_id', // 当前科目表的外键,对应中间表course的主键
        'department_id' // 中间表course的外键,对应远程表departments的主键
    );
}

2. 调整查询逻辑

查询数据时用with预加载你需要的所有关联即可,输出结构会自动匹配你的预期:

// 示例:查询部门信息时预加载科目、以及科目关联的部门
$departmentData = Department::with(['subject_list.department'])->first();

内容的提问来源于stack exchange,提问作者John Lloyd Detomal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:15:06