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的主键 ); }
参数详解(对应顺序)
让我再把每个参数的含义拆解清楚,避免以后再踩坑:
SubmissionFieldValues::class:最终要获取的关联模型(目标模型)SubmissionField::class:中间关联的模型(桥接模型)'field_id':中间表中用来关联主模型的外键字段(SubmissionField.field_id → Field.id)'submission_field_id':目标表中用来关联中间表的外键字段(SubmissionFieldValues.submission_field_id → SubmissionField.id)'id':主模型自己的主键字段(Field.id)'id':中间表自己的主键字段(SubmissionField.id)
你之前的错误在于把第三个参数(中间表的外键)写成了'id',这就导致Laravel用Field.id去匹配SubmissionField.id,而不是正确的SubmissionField.field_id,自然找不到关联数据啦。
内容的提问来源于stack exchange,提问作者user14476434
相关产品推荐
相关产品推荐

