gorm使用Save方法处理时间字段的坑

视频地址

Gorm中Save方法处理时间字段的坑

测试代码以及说明

package gorm_tests

import (
    "fmt"
    "github.com/stretchr/testify/require"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
    "testing"
    "time"
)

const (
    userTableName = "user"
)

type User struct {
    ID   uint   `gorm:"primaryKey;column:id"`
    Name string `gorm:"column:name"`
    Age  uint8  `gorm:"column:age"`
    // Notice gorm内置自动更新的字段!如果是创建/更新的话会自动将当前时间创建/更新进去
    CreatedAt time.Time `gorm:"column:created_at"`
    UpdatedAt time.Time `gorm:"column:updated_at"`

    // Notice 如果要自定义一个不一样的字段,需要加 default:null
    // Notice 并且在创建数据库的时候 这2个字段要加额外的配置:
    /*
      `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
      `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',
    */
    CreateTime time.Time `gorm:"column:create_time;default:null"`
    UpdateTime time.Time `gorm:"column:update_time;default:null"`
}

func (u User) TableName() string {
    return userTableName
}

func TestT1(t *testing.T) {
    dsn := "root:123@tcp(127.0.0.1:3307)/whw?charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    require.Equal(t, err, nil)
    fmt.Println("db: ", db)

    user := &User{
        ID: 88, // 如果ID存在则更新,如果ID不存在则创建!
    }
    db = db.Model(&User{})
    db.First(&user)
    user.Name = "天蓬"
    user.Age = 99

    // Notice Save方法
    err = db.Save(&user).Error

    require.Equal(t, err, nil)

}

~~~

posted on 2023-07-27 11:35  江湖乄夜雨  阅读(514)  评论(0编辑  收藏  举报