我有一个类似于 GORM 示例的 many2many 结构:
// User has and belongs to many languages, use `user_languages` as join table
type User struct {
gorm.Model
Languages []Language `gorm:"many2many:user_languages;"`
}
type Language struct {
gorm.Model
Name string
}
db.Model(&user).Related(&languages)
假设我创建了一个用户,它有两种关联的语言。
我从数据库中获取用户记录并从用户的 Languages 数组中删除一种语言。然后我将 gorm:save_associations 设置为 true 来保存用户。
我希望 GORM 删除将用户与该语言相关联的记录(在 GORM 管理的关联表中)。但是,它不会被删除。这是预期的吗?
是否可以通过从用户记录的 Languages 列表中删除一种语言然后保存用户来删除 many2many 关联记录?如果不是,那应该如何在 GORM 中完成?
更新
我找到了这个问题的解决方案,但不确定这是最好的方法。我存储当前语言,清除所有关联,然后添加回语言,然后保存。
languages := user.Languages
DB.Model(&user).Association("Languages").Clear()
user.Languages = languages