1

见下文。

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
}

我执行了插入。

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
4

1 回答 1

1

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

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

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

  1. 从 ORM 获取结构,该字段已设置为良好的值。select这是将执行的另一个查询。
  2. 执行自定义查询,失去了 ORM 的便利性
  3. 我猜你可能有另struct一种没有这个字段的类型。这看起来很乱,我不建议这样做。
于 2015-10-15T16:26:28.217 回答