go - GORM更新查询在where条件下自动分配时间列
问题描述
我是 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 列?
注意 我的表名和列都是大写的
解决方案
根据此链接中的信息,当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)
}
}
推荐阅读
- reactjs - 将数据添加到我的 firebase firestore 后端数据库后重新渲染反应组件
- meteor - 阿波罗 3 号、流星和“没有光纤就无法等待”
- macos - Mac Endpoint 安全性 - 防止用户删除钥匙串项目
- telegraf - Telegraf 间歇性处理器.regex
- angular - 在 PRIMENG p-inputNumber 中的逗号分隔符后自动移动光标
- java - 比较 Kotlin 中的 Calendar 和 LocalDate
- php - 如何在 mailgun 模板中添加变量
- c++ - 哪些因素决定了使用 g++ 构建的二进制文件需要哪个版本的 glibc?
- vb.net - 如何在 VB.NET 中使用可嵌入水晶报表设计器控制器
- c# - 从列表中选择一种材料,将其存储,然后将该材料作为新材料返回