戈尔姆"Insert Ignore"



我正在尝试实现"插入忽略";GORM。我尝试了Create(),但找不到添加Ignore的方法。我也试过在Gorm的Clause,

DB.Clauses(clause.Insert{Modifier: "IGNORE"}).Create(&user)`.

然而,我得到了一个错误说Clauses undefined (type *"github.com/jinzhu/gorm".DB has no field or method Clauses)

我也尝试过使用DB.Raw(),但我不知道如何每次都更改表,因为我的数据库中有这么多表。例如

DB.Raw("INSERT IGNORE INTO A/B/C/.. ... ...")`. 

我有很多表将通过这个函数,每次我都可能插入到不同的表中。

我想知道是否有人在GORM中有Insert Ignore的经验。谢谢

大家好,欢迎来到StackOverflow。

我想你用的是gorm v1。但您需要的代码在gorm v2上。

首先,您必须通过在终端上运行此命令来获得Gorm v2MySQL dialector

go get -u gorm.io/gorm // get gorm v2
go get -u gorm.io/driver/mysql // get dialector of mysql from gorm

则可以使用gorm的CCD_ 10。

这个代码将适用于您。

import (
"gorm.io/gorm"
"gorm.io/driver/mysql"
)

func main(){
db, err := gorm.Open(mysql.Open(MYSQL_CONNECTION_STRING), &gorm.Config{})
if err != nil {
fmt.Println(err.Error())
}else{
db.Clauses(clause.Insert{Modifier: "IGNORE"}).Create(&user)
}
}

对于Gorm v2,答案很清楚:Gorm中的子句。

对于Gorm v1,您可以在Gorm v1的测试中找到解决方案。参考:https://github.com/jinzhu/gorm/blob/master/create_test.go#L285

if DB.Dialect().GetName() == "mysql" && DB.Set("gorm:insert_modifier", "IGNORE").Create(&user).Error != nil {
t.Error("Should ignore duplicate user insert by insert modifier:IGNORE ")
}

我遇到过好几次这个问题,因为我们团队的很多人仍然有很多使用Gorm v1的代码。。。

最新更新