【问题标题】:Why Golang GORM hooks BeforeUpdate, AfterUpdate not firing?为什么 Golang GORM 挂钩 BeforeUpdate,AfterUpdate 不触发?
【发布时间】:2020-06-17 18:47:11
【问题描述】:

我尝试了来自here 的 Golang Gorm Hook,但在尝试通过模型 ModTrans 更新表 md_transaction 时没有触发任何东西,这里是我的 golang 代码:

package models

import (
   "time"
   "fmt"
   "github.com/jinzhu/gorm"
)

type ModTrans struct {
    TRX_ID  string `gorm:"primary_key;column:trx_id" json:"TRX_ID"`
    TRX_CODE string `gorm:"column:trx_code" json:"TRX_CODE"`
    TRX_DATE *time.Time `gorm:"column:trx_date" json:"TRX_DATE"`
    TRX_TYPE string `gorm:"column:trx_type" json:"TRX_TYPE"`
    TRX_PAY_METHOD int `gorm:"column:trx_pay_method" json:"TRX_PAY_METHOD"`
}

func (t *ModTrans) TableName() string {
    return "md_transaction"
}

// Updating data in same transaction
func (t *ModTrans) AfterUpdate(tx *gorm.DB) (err error) {
    fmt.Println(">>>>  it's work and firing....")
    return
}

基于文档

如果你为模型定义了指定的方法,它会被自动调用

我是钩子 golang GORM 的新手,为什么钩子不能很好地触发?还有其他例子吗?我试过用谷歌搜索没找到,可能是我的关键字搜索的不太对。

【问题讨论】:

  • 确保将*ModTrans 实例传递给gorm 更新代码,而不是ModTrans
  • @mkopriva gorm 更新我用过的方法,err = DB.Model(models.ModTrans{}).Where(&models.ModTrans{ TRX_CODE: pOrderCode }).Updates(models.ModTrans{TRX_PAY_METHOD: 1、TRX_STATUS: 2}).Error
  • 您只在 where 方法中使用了指针,这是不够的。将指针传递给 Updates 方法。 *ModTrans=指针,ModTrans=不是指针。要获取指针,请使用地址运算符&
  • @mkopriva nice,,,, >>>> 它的工作和触发...只需将代码所有方法更改为指针 DB.Model(&models.ModTrans{}).Where(&models.ModTrans { TRX_CODE: pOrderCode }).Updates(&models.ModTrans{TRX_PAY_METHOD: 1, TRX_STATUS: 2}).Error .. 谢谢你拯救了我的一天

标签: go go-gorm


【解决方案1】:

使用运算符 & 将方法更改为指针,效果很好:

err = DB.Model(&models.ModTrans{}).Where(&models.ModTrans{ TRX_CODE: pOrderCode }).
    Updates(&models.ModTrans{
        TRX_PAY_METHOD: 1, 
        TRX_STATUS: 2,
    }).Error

【讨论】:

    【解决方案2】:

    您需要传递 model 才能使钩子起作用。

    DB.Model(&models.ModTrans{}).Where("uuid = (?)", uuid).Update(&modTrans)
    

    【讨论】:

      猜你喜欢
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 2021-06-29
      • 2018-06-29
      • 1970-01-01
      相关资源
      最近更新 更多