首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有办法在使用go-gorm创建记录时删除返回子句?

是否有办法在使用go-gorm创建记录时删除返回子句?
EN

Stack Overflow用户
提问于 2021-01-21 18:27:36
回答 2查看 969关注 0票数 1

我使用go-gorm和postgres 11 DB,并面临一个问题,在创建记录时,我需要完全删除返回子句(该语句在默认情况下似乎包括在内)。我只想插入记录,除了错误之外,什么也得不到。我在数据库中有一些复杂的关系,它们不支持返回语句,所以当我尝试像这样插入时:(为了简洁起见,使代码更简单)

代码语言:javascript
复制
type Cargo struct {
    Id   int64 `gorm:"primaryKey"`
    Name string
}
dsnString := fmt.Sprintf("host=%s ...") 
db, _ := gorm.Open(postgres.New(postgres.Config{DSN: dsnString}), &gorm.Config{})

cargo := Cargo{Name: "test"}
db.Create(cargo)

我得到的错误“错误:不能执行插入返回关系货物”。

我尝试使用参数WithoutReturning: true创建db连接:

代码语言:javascript
复制
db, _ := gorm.Open(postgres.New(postgres.Config{DSN: dsnString, , WithoutReturning: true}), &gorm.Config{})

但是,当我尝试db.Create(cargo)时,我得到了一个不同的错误:“这个驱动程序不支持LastInsertId”。无论如何,它似乎仍在试图获得最后一个插入的id。

在gorm中,我可以使用db.Model(x).Returning("null").Insert(cargo),但是我找不到一种方法来使用gorm。任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-22 14:28:30

让gorm不要在postgres中使用RETURNING子句的唯一方法是

不声明主键的模型

这意味着去掉名为ID/Id或任何标记gorm:"primaryKey"的字段。

代码语言:javascript
复制
type Cargo struct {
    Name string
}
db.Create(&Cargo{Name: "Test"})

从地图创建Table()的结合

在这种情况下,您可以将模型表示为map[string]interface{}而不是结构,并按如下方式使用:

代码语言:javascript
复制
db.Table("cargos").Create(map[string]interface{}{
    "name": "Test",
})

就目前情况而言,gorm并不很好地支持这个用例。如果您不能调整您的视图以支持返回,并且这些选项不适合您,我建议在戈姆回购中添加一个特性请求。

票数 1
EN

Stack Overflow用户

发布于 2022-04-01 10:47:22

可以修改默认返回行为

代码语言:javascript
复制
db.Clauses(clause.Returning{}).Create(&cargo)

在这里,doc链接:https://gorm.io/docs/update.html#Returning-Data-From-Modified-Rows

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65833623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档