为什么Golang GORM挂钩BeforeUpdate,AfterUpdate不触发?

时间:2020-06-17 18:47:11

标签: go go-gorm

我已经尝试过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钩子的新手,为什么钩子不能很好地触发?还有其他例子吗?我曾尝试在Google上搜索未找到,也许我的关键词搜索不太正确。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您需要通过模型才能使钩子正常工作。

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