我们正在将项目从 v1 更新到 v2。当我们尝试通过仅提供更改的字段作为结构来更新行时,它会尝试设置created_at列并返回错误。这在 v1 中就起作用了。根据文档,在更新操作期间,具有默认值的字段将被忽略。
err := r.writeDB.Save(&Record{
Model: Model{
ID: 1,
},
Name: "AB",
}).Error
if err != nil {
return err
}
Run Code Online (Sandbox Code Playgroud)
生成以下 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
Run Code Online (Sandbox Code Playgroud)
返回以下错误
错误 1292:日期时间值不正确:第 1 行的“created_at”列的“0000-00-00”
有了这些实体
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
}
Run Code Online (Sandbox Code Playgroud)
DB.Omit允许在执行更新查询时忽略列。但这需要对代码库进行大量重构。行为发生改变还是缺少某些东西?
这可能对你有帮助。更改结构字段(或添加以替换默认的 gorm.Model 字段),如下所示:
CreatedAt time.Time `gorm:"<-:create"` // allow read and create, but don't update
Run Code Online (Sandbox Code Playgroud)
此标签有助于保存更新时创建的数据。
| 归档时间: |
|
| 查看次数: |
4668 次 |
| 最近记录: |