如何配置GORM中Exercise与Muscle双向多对多关联的中间表?
GORM多对多关联反向定义问题解答
你的场景里,Exercise和Muscle之间是两个独立的多对多关联——分别对应「辅助肌群」和「目标肌群」,各自关联不同的中间表:exercis_helper_muscles和exercis_target_muscles(顺便提一句,你代码里的表名可能打错了,应该是exercise_helper_muscles和exercise_target_muscles,少了个字母e)。
如果想在Muscle模型里反向关联这两种关系,不能只用一个Exercises字段,得拆成两个独立的反向关联字段,分别对应两张中间表,修改后的模型定义如下:
type Muscle struct { ID uint `gorm:"primaryKey"` // 反向关联:以该肌肉为辅助肌群的练习 AsHelperExercises []Exercise `json:"as_helper_exercises" gorm:"many2many: exercis_helper_muscles"` // 反向关联:以该肌肉为目标肌群的练习 AsTargetExercises []Exercise `json:"as_target_exercises" gorm:"many2many: exercis_target_muscles"` }
要是你想让Muscle的单个字段包含所有关联的练习(不管是目标还是辅助),GORM本身不支持直接通过一个字段关联多张中间表。这种情况有两种处理方式:
- 按上面的方式拆分字段,之后在业务代码里把两个字段的结果合并;
- 自己写SQL查询,通过联合两张中间表来获取所有关联的练习数据。
内容的提问来源于stack exchange,提问作者Iman pakseresht
相关产品推荐
相关产品推荐

