[gogf/gf]orm created_at、updated_at在参数是结构体时无效

2024-07-09 278 views
4

1.15 windows10

go version go1.15.3 windows/amd64

1.15

伪代码:

func TestTimeChange(t *testing.T) {

    res, err := g.DB().Model("t_group").Insert(&Group{
        Name: "二组",
    })
    if err != nil {
        fmt.Println(err)
    }
    id, err := res.LastInsertId()
    if err != nil {
        fmt.Println(err)
    }

    **①**g.DB().Model("t_group").Save(&Group{Id: id, Name: "三组"})
    **②**g.DB().Model("t_group").Delete("id =?", id)
}

执行此方法代码,当执行到①时,数据库已有新增记录,但是created_at为null image 执行到②时,数据库的name字段已更新,但是updated_at仍然为null ②执行完后,deleted_at字段有时间数据。 image

回答

1

@kim709394 你把debug特性打开,看看sql执行得对不对。我这里使用master分支没有复现你的问题,并且这块有严格的单元测试。

9
2021-01-20 08:43:22.221 [DEBU] [  7 ms] [default] SHOW FULL COLUMNS FROM `t_group`
2021-01-20 08:43:22.240 [DEBU] [ 19 ms] [default] INSERT INTO `t_group`(`name`,`deleted_at`,`created_at`,`updated_at`,`id`) VALUES('二组',null,null,null,0) 
2021-01-20 08:49:55.301 [DEBU] [ 14 ms] [default] INSERT INTO `t_group`(`id`,`created_at`,`updated_at`,`name`,`deleted_at`) VALUES(9,null,null,'三组',null) ON DUPLICATE KEY UPDATE `updated_at`=VALUES(`updated_at`),`name`=VALUES(`name`),`deleted_at`=VALUES(`deleted_at`),`id`=VALUES(`id`)
2021-01-20 08:49:55.305 [DEBU] [  3 ms] [default] UPDATE `t_group` SET `deleted_at`='2021-01-20 08:49:55' WHERE id =9

以上是执行过程中的sql

0

参数为map,伪代码: //测试时间更新,参数为map

func TestTimeChangeWithMap(t *testing.T){

    res, err := g.DB().Model("t_group").Insert(g.Map{"name": "四组"})
    if err != nil {
        glog.Error(err)
    }
    id, err := res.LastInsertId()
    if err != nil {
        glog.Error(err)
    }
    g.DB().Model("t_group").Save(g.Map{"name":"五组","id":id})
    g.DB().Model("t_group").Delete("id=?", id)
}

sql执行记录:

2021-01-20 08:59:53.710 [DEBU] [  8 ms] [default] SHOW FULL COLUMNS FROM `t_group`
2021-01-20 08:59:53.720 [DEBU] [ 10 ms] [default] INSERT INTO `t_group`(`name`,`created_at`,`updated_at`) VALUES('四组','2021-01-20 08:59:53','2021-01-20 08:59:53') 
2021-01-20 09:00:12.185 [DEBU] [  9 ms] [default] INSERT INTO `t_group`(`name`,`id`,`created_at`,`updated_at`) VALUES('五组',10,'2021-01-20 09:00:12','2021-01-20 09:00:12') ON DUPLICATE KEY UPDATE `name`=VALUES(`name`),`id`=VALUES(`id`),`updated_at`=VALUES(`updated_at`)
2021-01-20 09:00:12.188 [DEBU] [  3 ms] [default] UPDATE `t_group` SET `deleted_at`='2021-01-20 09:00:12' WHERE id=10

结论:参数为map是没问题的。

1

@kim709394 麻烦把你的Group结构体定义发出来看看呢。

9

应该是CreateAt和UpdateAt,并不是CreatedAt和UpdatedAt