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

hasManyThrough返回空数组求助:Laravel关联关系参数排查

解决Laravel hasManyThrough关联返回空的问题

嘿,你完全猜对了问题所在——就是hasManyThrough的参数顺序搞反了!这个方法的参数规则很容易记混,我来帮你梳理清楚并修正代码:

问题根源

你当前的参数顺序不符合LaravelhasManyThrough的要求,导致关联条件匹配错误,所以返回空数组。我们先明确三张表的关联逻辑:

  • Field(主模型)的id关联到SubmissionField(中间表)的field_id
  • SubmissionField的id关联到SubmissionFieldValues(目标表)的submission_field_id

正确的关联代码

public function fieldValues() {
    return $this->hasManyThrough(
        SubmissionFieldValues::class,
        SubmissionField::class,
        'field_id',       // 中间表SubmissionField中关联主模型Field的外键
        'submission_field_id', // 目标表SubmissionFieldValues中关联中间表SubmissionField的外键
        'id',             // 主模型Field的主键
        'id'              // 中间表SubmissionField的主键
    );
}

参数详解(对应顺序)

让我再把每个参数的含义拆解清楚,避免以后再踩坑:

  1. SubmissionFieldValues::class:最终要获取的关联模型(目标模型)
  2. SubmissionField::class:中间关联的模型(桥接模型)
  3. 'field_id':中间表中用来关联主模型的外键字段(SubmissionField.field_id → Field.id)
  4. 'submission_field_id':目标表中用来关联中间表的外键字段(SubmissionFieldValues.submission_field_id → SubmissionField.id)
  5. 'id':主模型自己的主键字段(Field.id)
  6. 'id':中间表自己的主键字段(SubmissionField.id)

你之前的错误在于把第三个参数(中间表的外键)写成了'id',这就导致Laravel用Field.id去匹配SubmissionField.id,而不是正确的SubmissionField.field_id,自然找不到关联数据啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:28:00