首页 文章

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

提问于
浏览
5

我有一个类似于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管理的关联表中) . 但是,它不会被删除 . 这是预期的吗?

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

Update

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

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

3 回答

  • 0

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

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

    此外,你可以通过使用“替换”来做到这一点

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

    我遇到了同样的问题,如果你想删除一个对我有用的协会

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

相关问题