登录
首页 >  Golang >  Go问答

如何防止 GORM 使用先前查询中的参数

来源:stackoverflow

时间:2024-04-01 13:51:36 493浏览 收藏

你在学习Golang相关的知识吗?本文《如何防止 GORM 使用先前查询中的参数》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

我正在使用 gorm 更新数据库事务范围内的 2 个实体:

tx = tx.model(models.action{}).where("id = ?", 1).updatecolumn("state", "complete")
tx = tx.model(models.claim{}).where("id = ?", 2).update("some_field", nil)

预期的行没有被更新,使用 db.logmode(true) 打开日志记录并查看 gorm 生成的 sql:

update "actions" set "state" = 'complete'  where (id = 2) and (id = 1)  
update "claims" set "some_field" = null  where (id = 2) and (id = 1) and (id = 2)

我不明白这些额外的 and 来自哪里,这是我可以让它生成所需查询的唯一方法:

UPDATE "actions" SET "state" = 'COMPLETE'  WHERE ID = 1
UPDATE "claims" SET "some_field" = NULL  WHERE ID = 2

...就是添加一个new(),所以tx.new().model....

添加 new() 是执行此操作的正确方法吗?


解决方案


您正在使用旧指针,这是多个 where 子句的原因。

你应该尝试一下

err := tx.Model(models.Action{}).Where("ID = ?", 1).UpdateColumn("state", "COMPLETE").Error
    if err != nil {
        tx.Rollback()
    }
err = tx.Model(models.Claim{}).Where("ID = ?", 2).Update("some_field", nil).Error
    if err != nil {
        tx.Rollback()
    }

到这里,我们也就讲完了《如何防止 GORM 使用先前查询中的参数》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>