登录
首页 >  Golang >  Go问答

自动将时间列添加到GORM更新查询的条件中

来源:stackoverflow

时间:2024-03-12 22:00:28 384浏览 收藏

你在学习Golang相关的知识吗?本文《自动将时间列添加到GORM更新查询的条件中》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

我是 golang 新手,我的结构如下

type user struct{
    id int `gorm:"column:id;primary_key:auto_increment" json:"id"`
    name *string `gorm:"column:name;default:null" json:"name"`
    deletedat *time.time `gorm:"column:deletedat;default:null" json:"deletedat"`
}

我的更新查询如下所示

if err := database.getmysqldb().debug().model(&user{}).where("id = ?", 15).updatecolumns(user).error; err != nil {
        fmt.println(err)
    }
}

但是我的mysql调试如下

UPDATE User SET  WHERE DelatedAt IS NULL and ID = 15

我不明白为什么查询在where条件中添加deletedat列?

注意 我的表名和列都是大写的


解决方案


根据 this 链接的信息,当 deleteat *time.time 添加到任何结构体时,将为匹配的数据库表启用软删除功能。这就是为什么使用 user 模型的所有查询都将包含 where deletedat is null 条件。

要解决此问题,您可以使用 unscoped 方法,该方法将在 sql 查询中包含软删除的记录。

if err := database.GetMysqlDB().Debug().Unscoped().Model(&User{}).Where("ID = ?", 15).UpdateColumns(user).Error; err != nil {
        fmt.Println(err)
    }
}

到这里,我们也就讲完了《自动将时间列添加到GORM更新查询的条件中》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

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