为了账号安全,请及时绑定邮箱和手机立即绑定

戈姆“插入忽略”

戈姆“插入忽略”

Go
达令说 2022-06-27 09:32:09
我正在尝试在 GORM 中实现“插入忽略”。我试过Create()了,但我找不到添加Ignore. 我也试过Gorm 中的条款,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/.. ... ...")`.我有很多表会通过这个函数,每次我可能会插入到不同的表中。我想知道是否有人有Insert IgnoreGORM 的经验。谢谢!
查看完整描述

2 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

您好,欢迎来到 StackOverflow。


我想你正在使用gorm v1. 但是您需要的代码在gorm v2.


首先,您必须在终端上获取Gorm v2并MySQL dialector运行此命令。


go get -u gorm.io/gorm // get gorm v2

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

然后你可以使用Clausesgorm。


此代码将为您工作。


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)

    }

}


查看完整回答
反对 回复 2022-06-27
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

因为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......


查看完整回答
反对 回复 2022-06-27
  • 2 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信