首页 > 解决方案 > 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 列?

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

标签: gogo-gorm

解决方案


根据链接中的信息,当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)
    }
}

推荐阅读