使用gorm的Updates方法修改status值为0时,库中的status值不会改变,但修改为非0值时,数据库的status值可正常修改,为什么?
CREATE TABLE `access` (
`id` int NOT NULL AUTO_INCREMENT,
`module_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '0',
`type` tinyint(1) DEFAULT NULL,
`action_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
`url` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
`module_id` int DEFAULT NULL,
`sort` int DEFAULT NULL,
`description` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
`status` int DEFAULT NULL,
`add_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
);
type Access struct {
Id int
ModuleName string
Type int
ActionName string
Url string
ModuleId int
Sort int
Description string
Status int
AddTime time.Time
AccessItem []Access `gorm:"foreignkey:ModuleId;references:Id"` // 子节点,关联自身表;
}
func main() {
access := model.Access{
Status: 0,
}
err := dao.Mdb.Model(&model.Access{}).Where("id = ?", 81).Updates(access).Error
if err != nil {
fmt.Println("修改失败", err)
} else {
var status int
e := dao.Mdb.Model(&model.Access{}).Select("status").Where("id = ?", 81).First(&status).Error
if e != nil {
fmt.Println("查询失败:", e)
return
}
fmt.Println("status:", status)
}
}
奇怪的是使用原生sql可以正常修改数据库中的status值为0,为什么呢?
access := model.Access{
ModuleName: moduleName,
Type: accessType,
ActionName: actionName,
Url: url,
ModuleId: moduleId,
Sort: sort,
Description: description,
Status: status,
AddTime: time.Now(),
}
err := dao.Mdb.Exec("update access set module_name = ? , type = ? , action_name = ? , url = ? , module_id = ? , sort = ? , description = ? , status = ? , add_time = ? where id = ?", access.ModuleName, access.Type, access.ActionName, access.Url, access.ModuleId, access.Sort, access.Description, access.Status, access.AddTime, id).Error