ZBLOG

gorm中将mysql的string类型的数据转化为time类型的数据

在 gorm 中,我们可以使用结构体中的 time.Time 类型来表示时间类型的数据。如果数据库表中存储时间的字段是 string 类型,则需要进行类型转换。

gorm 提供了一个 Callback() 方法,该方法可以注册一个回调函数,在对应操作时会被调用。我们可以在回调函数中进行数据类型转换操作。

具体实现步骤如下:

  1. 在模型结构体中定义两个字段:原始字符串类型的时间字段和 time.Time 类型的时间字段;
  2. 使用 Callback() 方法注册一个回调函数,该回调函数会在查询操作时被调用;
  3. 在回调函数中对原始字符串类型的时间字段进行解析,并将解析后得到的 time.Time 类型的值赋给目标时间字段。

以下是示例代码:

import (
    "time"
    "github.com/jinzhu/gorm"
)

type User struct {
    ID   uint
    Name string

    // 原始字符串类型的时间字段
    RawCreatedAt string `gorm:"column:created_at"`

    // 转换后的 time.Time 类型时间字段
    CreatedAt time.Time `gorm:"-"`
}

// 定义回调函数,将 RawCreatedAt 字段转为 CreatedAt 字段
func (u *User) AfterFind(tx *gorm.DB) error {
    t, err := time.Parse("2006-01-02 15:04:05", u.RawCreatedAt)
    if err != nil {
        return err
    }
    
    u.CreatedAt = t
    
    return nil
}

// 设置表名和主键名等信息
func (u *User) TableName() string {
    return "users"
}

func main() {
    db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8mb4&parseTime=True&loc=Local")
    if err != nil {
        panic(err)
    }
    
    defer db.Close()
    
    var user User
    db.Where("id = ?", 1).First(&user)
    
    fmt.Println(user.CreatedAt)
}

在上述代码中,我们定义了一个名为 User 的模型结构体,其中包含原始字符串类型的时间字段 `

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=3568

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?