gin框架如何使用gorm的新增和查询的钩子

1. 运行环境

mac go 1.16

2. 问题描述?

type Abc struct {
    Id              int64  `json:"id"`
    Aa          string  `json:"aa"`
    Bb        string  `json:"bb"`
}
func (a *Abc) UpdateParams(ctx *gin.Context, conds, fields) (err error) {
    //更新参数
    return
}
func (z *Abc) BeforeUpdate(tx *gorm.DB) (err error) {
    fmt.Println(z)
    z.Bb = z.Aa
    //或者
    tx.Statement.Set("bb", z.Aa)
    return nil
}

3. 您期望得到的结果?

期望更新aa字段时候,bb字段也直接更新了

4. 您实际得到的结果?

未更新bb
UPDATE abc SET aa=’12345678’ WHERE id = 1

讨论数量: 6

貌似刚好没把重点的代码贴出来,要看你是怎么 update 的,像UpdateColumn更新字段会跳过钩子的。不妨进去看下源码。 另外,如果钩子返回了任何错误,则修改将被回滚。

1年前 评论
lazyant (楼主) 1年前
lazyant (楼主) 1年前

你在钩子里没调用 tx.Model(&Model{}).Where("xxx = ?", xxx).Update("xxx", xxx) 啊,怎么可能触发更新。

1年前 评论
lazyant (楼主) 1年前
lazyant (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!