2016-07-08 182 views
3

我有类似GORM的示例many2many结构:Golang 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) 

比方说,我创建了一个用户,它有两个相关的语言。

我从数据库中获取用户记录,并从用户的语言数组中删除一种语言。然后用gorm:save_associations设置为true来保存用户。

我希望GORM删除将用户关联到该语言的记录(在GORM管理的关联表中)。但是,它不会被删除。这是预期的吗?

是否可以通过从用户记录的语言列表中删除一种语言,然后保存用户来删除许多关联记录?如果不是,GORM应该如何实现?

更新

我找到了解决这个问题,但不知道它的做到这一点的最好办法。我存储当前的语言,清除所有关联,然后添加语言,然后保存。

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

回答

0

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

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

我有同样的问题,如果你只想通过删除这个工作对我来说

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

谢谢亚历克斯。我在gorm单元测试中看到了这种方法。尽管如此,它并不能满足我的要求。我需要从前端回发包含更新语言列表的修改后的用户。我不知道需要删除的特定语言。 –

+0

我使用此c.DB.Model(&user).Association(“Roles”)。Delete(user.Roles)其中user.Roles是角色数组,它删除角色和用户之间的所有关联 – Alex

1

同样的协会之一,你能做到这一点“替换”

DB.Model(&user).Association("Languages").Replace(user.Languages) 
相关问题