V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
bigNewsMaker
V2EX  ›  Go 编程语言

[gorm] beforeUpdate hook 方法

  •  
  •   bigNewsMaker · 2021-06-15 10:26:04 +08:00 · 1489 次点击
    这是一个创建于 1286 天前的主题,其中的信息可能已经有所发展或是发生改变。

    gorm 中 BeforeUpdate 方法能取到 update 之后的值吗,或者使用 gorm 如何实现这种 hook ?

    func (m *User) BeforeUpdate(tx *gorm.DB) (err error) {
    	if tx.Statement.Changed("Mobile") {
    		err = tx.Model(&Profile{}).Where("user_id = ?",m.ID).Update("mobile", m.Mobile(这里是更新之前的 mobile)).Error
    		if err != nil {
    			DB.Error("user before update hook(mobile) error", zap.Any("err", err))
    		}
    	}
        }
    

    如上面的代码,只能按照文档里的说明,只能用 changed 来检测 col 是否被更改, 但是拿不到更新后的值。或者是上面的这种实现方法对么,求指点 问:如何实现这种在检测到值更改之后,然后用 更新后的值 再去做操作的 hook ?

    2 条回复    2021-06-15 11:33:55 +08:00
    chengxiao
        1
    chengxiao  
       2021-06-15 11:08:26 +08:00
    更新后的值 不是用 AfterUpdate?
    bigNewsMaker
        2
    bigNewsMaker  
    OP
       2021-06-15 11:33:55 +08:00
    @chengxiao AfterUpdate 的确是有个 AfterUpdate 的 hook,但是 AfterUpdate 里的 statement.Changed 方法不能检测到 col 是否更改,所以,一直返回的 false,不能进入 if 里面的逻辑。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   873 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:24 · PVG 04:24 · LAX 12:24 · JFK 15:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.