我正在使用 GORM 连接到 mysql DB 并拥有一个在两个表之间具有多对多关系的模式。当我尝试保存定义关系的实体时,它还会尝试插入作为关联一部分的其他实体。
**My Model:**
type Language struct {
gorm.Model
Name string
}
type User struct {
gorm.Model
Name string
Languages []Language `gorm:"many2many:user_languages;"`
}
**Code sample:**
var languages []Language
err := db.Find(&languages).Error
if err != nil { panic(err) }
user := User{Name: "dexter", Languages: languages}
err = db.Save(&user).Error
if err != nil { panic(err) }
输出 上面的代码尝试再次插入语言表。因此,它会触发语言模型的 afterCreate 钩子,这是预期之外的。
插入
languages
(created_at
,updated_at
,deleted_at
,name
,id
) 值 ('2024-01-22 19:44:37.247','2024-01-22 19: 44:37.247','eng',55),('2024-01-22 19:44:37.247','2024-01-22 19:44:37.247','hin',57) 关于重复密钥更新 id
=id
如何避免
insert into languages
并跳过 afterCreate 钩子。
您应该指定表格: var languages []语言 err := db**.Table("TableOfLanguages")**.Find(&languages).Error