go - GORM更新查询会自动将时间列分配在何处

标签 go go-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 <data> 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)
    }
}

关于go - GORM更新查询会自动将时间列分配在何处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65302614/

相关文章:

go - 如何通过 HTTPS 在 Golang 中进行 SOAP 调用

macos - 如何在 Mac 上为 Ubuntu 交叉编译 Go 程序?

postgresql - golang-migrate无法找到postgres驱动程序

sql - 如何使用 GORM 从多对多关系相关的其他表中过滤包含实体的表?

go - 如何理解这个错误? “unsupported destination, should be slice or struct”

go - gorm rest API 中的模式搜索

go - 如何动态添加一列到container.NewGridWithColumns()

go - 为什么用 ParseInLocation 打印不同的时区?

go - 如何更新多对多关系

go - 如何在gorm(GoLang)中创建BelongsTo关系