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
相关产品推荐
相关产品推荐

