Laravel使用HasManyDeep查询公司关联商会返回空如何解决?
问题原因
你的hasManyDeep关联方法的外键参数顺序配置错误,和中间表的遍历顺序不匹配,导致关联查询条件拼接错误,所以返回空结果。
hasManyDeep核心参数和你的业务场景匹配规则如下:
- 第一个参数:目标模型
App\Models\Chamber,你原本的配置正确 - 第二个参数:从当前
Company模型到目标模型经过的中间节点数组['activity_company','App\Models\Activity'],你原本的配置正确 - 第三个参数(外键数组):每个中间节点中指向上一级模型的外键,顺序和中间节点顺序一一对应:
- 第一个中间节点是多对多中间表
activity_company,指向Company的外键为company_id - 第二个中间节点是
Activity模型,指向activity_company的外键为主键id(对应中间表的activity_id字段)
- 第一个中间节点是多对多中间表
- 第四个参数(本地键数组):每个上一级模型中被中间节点外键关联的本地键,顺序和中间节点顺序一一对应:
Company模型被activity_company关联的本地键为主键idactivity_company被Activity关联的本地键为activity_id字段
修复后的关联方法
public function chambers(){ return $this->hasManyDeep( 'App\Models\Chamber', ['activity_company','App\Models\Activity'], ['company_id', 'id'], ['id', 'activity_id'] )->distinct(); }
末尾追加的distinct()用于避免同一个公司参与多个同属一个商会的活动时,返回重复的商会数据,不需要可直接删除。
内容的提问来源于stack exchange,提问作者Ahmed
相关产品推荐
相关产品推荐

