Golang Gorm:是否可以通过多对多关系删除记录?

Golang Gorm: Is it possible to delete a record via a many2many relationship?

我有一个类似于 GORM 示例的多对多结构:

// 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 管理的关联 table 中)。但是,它不会被删除。这是预期的吗?

是否可以通过从用户记录的语言列表中删除一种语言然后保存用户来删除 many2many 关联记录?如果没有,这应该如何在 GORM 中完成?

更新

我找到了解决这个问题的方法,但不确定这是最好的方法。我存储当前语言,清除所有关联,然后添加回语言,然后保存。

languages := user.Languages
DB.Model(&user).Association("Languages").Clear()
user.Languages = languages

我找到了解决这个问题的方法,但不确定这是最好的方法。我存储当前语言,清除所有关联,然后添加回语言,然后保存。

languages := user.Languages 
DB.Model(&user).Association("Languages").Clear()
user.Languages = languages

我遇到了同样的问题,如果您只想删除对我有用的关联之一

    c.DB.Model(&user).Association("Roles").Delete(&role)

另外,您可以使用 "replace"

DB.Model(&user).Association("Languages").Replace(user.Languages)

这是我正在使用的东西。如果这对任何人有帮助。

db.Preload("Languages").Find(&user, r.FormValues("id"))

db.Model(&user).Association("Languages").Clear()
db.Save(&user) // We are deleting all the records first 

.....
.....
user.Languages = languages 
db.Save(&user) // Re insert all the records