登录
首页 >  Golang >  Go问答

如何在 BeforeSave 或 BeforeUpdate 挂钩中访问客户端的输入值

来源:stackoverflow

时间:2024-02-07 10:45:22 447浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《如何在 BeforeSave 或 BeforeUpdate 挂钩中访问客户端的输入值》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

数据库中用户的初始值为:

user := user{name: "ketamplok", age: 18, active: false}

我想用这个更新它:

db.model(&user).updates(user{name: "kecopret", age: 20, active: true})

然后我想获取这些钩子中的 age 值,即 20:

func (u *User) BeforeSave(tx *gorm.DB) (err error) {
    fmt.Println(u.Age) // this shows 18 instead of 20
    return
}

func (u *User) BeforeUpdate(tx *gorm.DB) (err error) {
    fmt.Println(u.Age) // this shows 18 instead of 20
    return
}

但是我无法获取该值,而是得到的是旧值,即 18

如何获取“待保存”值?新的那一个? 20?

感谢您的帮助


正确答案


您应该使用函数中的参数 tx *gorm.db 。尝试这样的事情:

func (u *User) BeforeSave(tx *gorm.DB) (err error) {
    for column, value := range tx.Statement.Dest {
        fmt.Println(column, "value is", string(value))
    }
}

这是文档:https://pkg.go.dev/gorm.io/gorm#DB.Transaction

今天关于《如何在 BeforeSave 或 BeforeUpdate 挂钩中访问客户端的输入值》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>