Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Gorm中追加多对多关系,而不升级已存在的关联行?_Go_Orm_Go Gorm - Fatal编程技术网

如何在Gorm中追加多对多关系,而不升级已存在的关联行?

如何在Gorm中追加多对多关系,而不升级已存在的关联行?,go,orm,go-gorm,Go,Orm,Go Gorm,在多对多关联中,我如何将一个模型与已有的其他模型关联起来,而不让GORM执行查询以插入已有的模型 例如: 假设我有两个GORM模型,它们之间存在多对多关联: type A struct { ID int `gorm:"primaryKey"` Bs []B `gorm:"many2many:a_bs;"` } type B struct { ID int `gorm:"primaryKey"` As [

在多对多关联中,我如何将一个模型与已有的其他模型关联起来,而不让GORM执行查询以插入已有的模型

例如:

假设我有两个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;"`
}
假设我创建两个作为:

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

a2 := A{}
db.Create(&a2)
这将按预期产生以下查询:

INSERT INTO "as" DEFAULT VALUES RETURNING "id"
INSERT INTO "as" DEFAULT VALUES RETURNING "id"
然后假设我想创建一个B并将其与As关联:

b := B{
    As: []A{a1, a2},
}
db.Create(&b)
这将导致以下查询:

INSERT INTO "as" ("id") VALUES (3),(4) ON CONFLICT DO NOTHING RETURNING "id"
INSERT INTO "a_bs" ("b_id","a_id") VALUES (3,3),(3,4) ON CONFLICT DO NOTHING
INSERT INTO "bs" DEFAULT VALUES RETURNING "id"
如何消除第一个查询,它会不必要地增加已插入的模型

使用

对于代码的第二位,则具有相同的效果。添加Omit(“As”)子句将取消整个插入。

db.Omit(“As.*)。创建(&b)
gorm文件中有一条说明,详细说明了这一点。很容易错过

b := B{}
db.Create(&b)
db.Model(&b).Association("As").Append([]A{a1, a2})