Golang的Gorm时间戳

dgenwo3n  于 2023-01-15  发布在  Go
关注(0)|答案(3)|浏览(472)
type Base struct {
    ID          uint            `gorm:"primary_key" json:"id"`
    CreatedAt   time.Time       `json:"created_at"`
    UpdatedAt   time.Time       `json:"updated_at"`
    DeletedAt   *gorm.DeletedAt `sql:"index" json:"deleted_at" swaggertype:"primitive,string"`
    CreatedByID uint            `gorm:"column:created_by_id" json:"created_by_id"`
    UpdatedByID uint            `gorm:"column:updated_by_id" json:"updated_by_id"`
}

如果我传递一些值给created_at和updated_at,它会把当前时间作为默认值,而不是我传递的值,有什么方法可以让gorm接受我传递的值吗?

ndh0cuux

ndh0cuux1#

三种方式
1.为字段定义默认标签,使用database函数填写默认值。例如,对于MySQL数据库,可以使用current_timestamp()

CreatedAt time.Time `gorm:"default:CURRENT_TIMESTAMP()"`

1.按照@Guolei的建议指定默认值。
1.将gorm.Model嵌入到你的结构体中,以自动处理ID、CreatedAt、UpdatedAt和DeletedAt。

nnvyjq4y

nnvyjq4y2#

如果包含字段:CreatedAt和UpdatedAt,gorm将使用reflect在执行时插入默认值。您也可以给予具体的值。

info := Example{
    CreatedAt: time.Now(),
    UpdatedAt: time.Now(),
}
_, err := DB.Insert(info)
gjmwrych

gjmwrych3#

更新@s3vt的回答:
如果你使用他们提供的第一个方法,你需要把这个函数放在没有括号的地方,如下所示:

CreatedAt time.Time `gorm:"default:current_timestamp"`

我花了很多时间试图找出我得到的错误,所以我想我会分享它的人谁可能会面临这个!

相关问题