首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gorp PreUpdate方法update非自愿列

gorp PreUpdate方法update非自愿列
EN

Stack Overflow用户
提问于 2015-10-15 23:03:28
回答 1查看 151关注 0票数 1

见下文。

代码语言:javascript
复制
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。

代码语言:javascript
复制
user := model.User{
    Name:      "John",
}

err := dbMap.Insert(&user)

插入的结果。没问题

代码语言:javascript
复制
1,John,1444918337049394761,1444918337049394761

继续,我执行了更新。

代码语言:javascript
复制
user := model.User{
    Id:        1,
    Name:      "John",
}

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

更新的结果

代码语言:javascript
复制
1,John,0,1444918337049394900

已更新列DateCreate。

当然,我的期望值是

代码语言:javascript
复制
1,John,1444918337049394761,1444918337049394900
EN

回答 1

Stack Overflow用户

发布于 2015-10-16 00:26:28

这是因为在初始化user结构时,您没有显式地设置user.DateCreate,这实际上会将其设置为0。

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

要做你想做的事情,你必须在权衡之间做出选择。

字段已设置为good值的

  1. Get the struct from the ORM,。这是另一个将被executed.
  2. Execute a custom query,的select查询,失去了ORM
  3. 的便利性,我猜您可以在没有这个字段的情况下使用另一个struct类型。这看起来很乱,我不推荐这样做。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33152031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档