小编ech*_*315的帖子

如何在 Gorm 中附加到多对多关系而不更新插入已经存在的关联行?

如何在多对多关联中将模型与已存在的其他模型关联起来,而不需要 GORM 执行查询来 UPSERT 已存在的模型?

例子:

假设我有两个相互多对多关联的 GORM 模型:

type A struct {
    ID int `gorm:"primaryKey"`
    Bs []B `gorm:"many2many:a_bs;"`
}

type B struct {
    ID int `gorm:"primaryKey"`
    As []A `gorm:"many2many:a_bs;"`
}
Run Code Online (Sandbox Code Playgroud)

假设我创建两个 As:

a1 := A{}
db.Create(&a1)

a2 := A{}
db.Create(&a2)
Run Code Online (Sandbox Code Playgroud)

这将按预期产生以下查询:

INSERT INTO "as" DEFAULT VALUES RETURNING "id"
INSERT INTO "as" DEFAULT VALUES RETURNING "id"
Run Code Online (Sandbox Code Playgroud)

假设我想创建一个 B 并将其与 As 关联:

b := B{
    As: []A{a1, a2},
}
db.Create(&b)
Run Code Online (Sandbox Code Playgroud)

这将导致以下查询:

INSERT INTO "as" ("id") VALUES (3),(4) ON CONFLICT DO NOTHING …
Run Code Online (Sandbox Code Playgroud)

orm go go-gorm

9
推荐指数
1
解决办法
5175
查看次数

标签 统计

go ×1

go-gorm ×1

orm ×1