【发布时间】: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 .. 谢谢你拯救了我的一天