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

GORM自引用实体:配置多对多关联实现父子用户查询

GORM自关联多对多配置:查询父用户(SuperUsers)

这是典型的自关联多对多场景,SubUsers和SuperUsers共享同一个中间表user_sub_users,但关联的字段方向相反。你只需要给SuperUsers字段补充正确的GORM标签配置即可:

type User struct {
    gorm.Model
    Name       string
    SubUsers   []*User `gorm:"many2many:user_sub_users;constraint:OnDelete:CASCADE"`
    SuperUsers []*User `gorm:"many2many:user_sub_users;joinForeignKey:sub_user_id;joinReferences:user_id;constraint:OnDelete:CASCADE"`
}

配置说明:

  • many2many:user_sub_users:指定和SubUsers共享同一个中间表
  • joinForeignKey:sub_user_id:当前用户作为子用户时,对应中间表的sub_user_id字段
  • joinReferences:user_id:关联的父用户对应中间表的user_id字段

查询示例:

要同时加载子用户和父用户,使用Preload预加载关联数据:

var alice User
// 根据ID查询Alice,并预加载关联的子用户和父用户
db.Preload("SubUsers").Preload("SuperUsers").First(&alice, 1)

查询后alice的结构会完全符合你的预期:

Alice ->
   SubUsers: [Bob, Joe]
   SuperUsers: [Manuel]

你的users_sub_users表结构是正确的,包含user_id(父用户ID)和sub_user_id(子用户ID)两个关联字段,完全匹配配置要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:01:35