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

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关联的本地键为主键id
    • activity_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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:24:05