【发布时间】:2021-02-24 14:37:26
【问题描述】:
我们正在将我们的项目从 v1 更新到 v2。
当我们尝试通过仅提供更改的字段作为结构来更新行时,它会尝试设置created_at 列并返回错误。这在 v1 中有效。根据文档,在更新操作期间,具有默认值的字段将被忽略。
err := r.writeDB.Save(&Record{
Model: Model{
ID: 1,
},
Name: "AB",
}).Error
if err != nil {
return err
}
生成以下 SQL 语句
[3.171ms] [rows:0] UPDATE `records` SET `created_at`='0000-00-00 00:00:00',`updated_at`='2020-11-12 15:38:36.285',`name`='AB' WHERE `id` = 1
返回以下错误
错误 1292:日期时间值不正确:列的“0000-00-00” 第 1 行的“created_at”
与这些实体
type Model struct {
ID int `gorm:"primary_key,type:INT;not null;AUTO_INCREMENT"`
CreatedAt time.Time `gorm:"type:TIMESTAMP(6)"`
UpdatedAt time.Time `gorm:"type:TIMESTAMP(6)"`
}
type Record struct {
Model
Name string
Details string
}
DB.Omit 允许在执行更新查询时忽略列。但这需要在代码库中进行大量重构。行为是否发生了变化或有什么遗漏?
【问题讨论】:
-
您似乎对 UpdatedAt 字段有回调,但对 CreatedAt 没有。也许您也应该为 CreatedAt 创建一个:v1.gorm.io/docs/write_plugins.html#callbacks