gpt4 book ai didi

gorp PreUpdate 方法更新非自愿列

转载 作者:IT王子 更新时间:2023-10-29 02:15:36 27 4
gpt4 key购买 nike

见下文。

type User struct {
Id int64 `db:"id" json:"id"`
Name string `db:"name" json:"name"`
DateCreate int64 `db:"date_create"`
DateUpdate int64 `db:"date_update"`
}

func (u *User) PreInsert(s gorp.SqlExecutor) error {
u.DateCreate = time.Now().UnixNano()
u.DateUpdate = u.DateCreate
return nil
}

func (u *User) PreUpdate(s gorp.SqlExecutor) error {
u.DateUpdate = time.Now().UnixNano()
return nil
}

我执行了 INSERT。

user := model.User{
Name: "John",
}

err := dbMap.Insert(&user)

插入的结果。没问题

1,John,1444918337049394761,1444918337049394761

继续,我执行了UPDATE。

user := model.User{
Id: 1,
Name: "John",
}

_, err := dbMap.Update(&user)

更新结果

1,John,0,1444918337049394900

DateCreate 列已更新。

当然,我的期望值是

1,John,1444918337049394761,1444918337049394900

最佳答案

那是因为在初始化您的 user 结构时,您没有明确设置 user.DateCreate,这实际上将其设置为 0。

gorp 无法猜测您要更新或不更新哪些字段,因此它会更新所有字段。

做自己想做的事,必须取舍

  1. Get the struct from the ORM ,该字段已设置为合适的值。这是一个将要执行的附加 select 查询。
  2. Execute a custom query , 失去了 ORM 的便利性
  3. 我猜你可以有另一个没有这个字段的 struct 类型。这看起来很乱,我不建议这样做。

关于gorp PreUpdate 方法更新非自愿列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33152031/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com