gorm 是一个流行的 Go 语言 ORM 库,用于操作数据库。在使用 gorm 时,如果一个 time.Time 字段缺少值,gorm 默认会将其保存为 '0000-00-00'。
要告诉 gorm 将缺少的 time.Time 字段保存为 NULL,而不是 '0000-00-00',可以使用 null.Time
类型来替代 time.Time
类型。null.Time
是 gorm 提供的一个可空的时间类型,它可以存储 NULL 值。
以下是具体的步骤:
github.com/guregu/null/v4
包。这是 gorm 使用的可空类型包。import (
"github.com/guregu/null/v4"
"gorm.io/gorm"
"time"
)
type User struct {
ID uint
Name string
CreatedAt null.Time
UpdatedAt null.Time
}
func (User) TableName() string {
return "users"
}
func (u *User) BeforeCreate(tx *gorm.DB) (err error) {
if u.CreatedAt.IsZero() {
u.CreatedAt.Time = time.Now()
}
return
}
func (u *User) BeforeUpdate(tx *gorm.DB) (err error) {
if u.UpdatedAt.IsZero() {
u.UpdatedAt.Time = time.Now()
}
return
}
func main() {
db, err := gorm.Open(mysql.Open("dsn"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// 自动迁移模式
db.AutoMigrate(&User{})
}
以上示例中,CreatedAt
和 UpdatedAt
字段使用了 null.Time
类型,并在 BeforeCreate
和 BeforeUpdate
方法中处理了默认时间的设置。BeforeCreate
和 BeforeUpdate
方法是 gorm 提供的回调函数,用于在创建和更新之前自动执行相关操作。
通过上述步骤,当你使用 gorm 创建或更新模型时,如果 CreatedAt
或 UpdatedAt
字段缺少值,gorm 将会将其保存为 NULL,而不是 '0000-00-00'。
在腾讯云相关产品中,可以使用云数据库 MySQL、云数据库 MariaDB 等产品来存储和操作这样的数据。这些产品提供了稳定可靠的数据库服务,可以满足不同规模和需求的业务场景。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云