我是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/