见下文。
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)
INSERT的结果。没问题
1,John,1444918337049394761,1444918337049394761
继续,我执行了更新。
user := model.User{
Id: 1,
Name: "John",
}
_, err := dbMap.Update(&user)
更新结果
1,John,0,1444918337049394900
列DateCreate已更新。
当然,我的期望值是
1,John,1444918337049394761,1444918337049394900
答案 0 :(得分:1)
这是因为在初始化user
结构时,您没有明确设置user.DateCreate
,这有效地将其设置为0.
gorp无法猜测您要更新的字段,因此会更新所有字段。
要做你想做的事,你必须在权衡之间做出选择
select
查询。struct
类型。这看起来很乱,我不推荐。