GORM多对多关联仅生成单侧连接表条目,是否为预期行为?
问题解答
这是你模型定义的问题,不是GORM的预期行为。
GORM的多对多关联默认是双向共享同一张连接表,你现在给User和Playlist分别指定了user_playlists和playlist_users两张不同的连接表,相当于把两个模型的关联拆成了两个独立的单向关联,而非一个双向的多对多关系。
这种情况下,执行db.Model(&playlist).Association("Users").Append(&user)只会操作playlist_users表——因为这是Playlist模型关联Users时指定的连接表;而User模型关联Playlists用的是另一张user_playlists表,自然不会被自动更新,所以你得额外执行反向的Append操作才能更新这张表。
正确的多对多模型定义应该让两个模型指向同一张连接表,比如:
type User struct { gorm.Model Playlists []Playlist `gorm:"many2many:user_playlists;"` } type Playlist struct { gorm.Model Users []User `gorm:"many2many:user_playlists;"` }
这样定义后,执行db.Model(&playlist).Association("Users").Append(&user)就会在user_playlists表中生成对应的关联记录,此时通过user.Playlists也能查询到该播放列表,不需要额外执行反向的Append操作。
内容的提问来源于stack exchange,提问作者me-an-ape
相关产品推荐
相关产品推荐

