2016-07-08 143 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) 
相關問題