为了账号安全,请及时绑定邮箱和手机立即绑定

go-pg,UpdateNotZero 不按设计更新可空字段,怎么办?

go-pg,UpdateNotZero 不按设计更新可空字段,怎么办?

Go
DIEA 2022-06-13 10:43:32
我很难理解如何使用go-pg和UpdateNotZero().例子:type Player struct {  ID            int  CreatedAt     time.Time `pg:"default:now(),notnull"`  UpdatedAt     time.Time  AccountID     *int}假设我现在有这个播放器:+----+------------+------------+------------+| ID | created_at | updated_at | account_id |+----+------------+------------+------------+|  1 | 2020-06-16 | NULL       |         12 |+----+------------+------------+------------+在我的 GO 代码中,我需要“删除” AccountID,我需要取消它: from 12to NULL.如果我update()这样使用:...player.AccountID = nil_, err := db.Model(player).WherePK().Update()它给了我错误:ERROR #23502 null value in column \"created_at\" violates not-null constraint"如果我UpdateNotZero()这样使用:...player.AccountID = nil_, err := db.Model(player).WherePK().UpdateNotZero()它根本不更新AccountID。怎么做?
查看完整描述

2 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

将更新限制为仅您尝试更改的字段:

_, err := db.Model(player).WherePK().Set("account_id = NULL").Update()


查看完整回答
反对 回复 2022-06-13
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

UpdateNotZero() 仅更新具有值的字段。设置 player.AccountID = nil 意味着你的 player.AccountID 没有价值。我最接近的猜测是 go-pg 将 nil 解析为 null,因此它根本不会更新,因为它 go-pg 将字段视为空。



查看完整回答
反对 回复 2022-06-13
  • 2 回答
  • 0 关注
  • 155 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信