由于外键约束,无法删除 GORM 多对多关联

问题描述 投票:0回答:1

我有两个模型,与 GORM 的文档一模一样:

type User struct {
  gorm.Model
  Languages []Language `gorm:"many2many:user_languages;"`
}

type Language struct {
  gorm.Model
  Name string
}

用户对语言有显式引用,但语言对用户没有显式引用。我正在尝试删除一种语言,但我得到:

 ERROR: update or delete on table "languages" violates foreign key constraint "fk_user_languages_language" on table "user_languages" (SQLSTATE 23503)

我尝试了多种方法,包括选择删除:

db.Select(clause.Associations).Delete(&user)

并使用

Unscoped()
。绝对没有任何作用,我无法删除这个对象。我希望 GORM 能够自动处理删除关联表中正确的行。

谢谢你

sql go associations go-gorm
1个回答
0
投票

出现您遇到的问题是因为 GORM 默认情况下尝试通过在“languages”和“user_languages”表之间强制执行外键约束来维护数据完整性。当您尝试直接删除“Language”对象时,GORM 检测到“user_languages”表中仍然存在关联。此外键约束可防止删除“语言”,直到删除关联为止。

删除前明确解除用户关联:

var languageToDelete Language
// ... (fetch the language)

db.Model(&languageToDelete).Association("Users").Clear() // Removes all associations

db.Delete(&languageToDelete)
© www.soinside.com 2019 - 2024. All rights reserved.