GORM中钩子的简单使用

钩子Hook
Hook 是在创建、查询、更新、删除等操作之前、之后调用的函数。

示例

//定义的model
type User struct {
	gorm.Model
	Username    string
	Password    string
	Role_name   string
	Mobilephone string
	State       bool
}
//定义的BeforeDelete钩子
func (u *User) BeforeDelete(tx *gorm.DB) (err error) {
	if u.ID == 1 {
		return errors.New("无法删除管理员")
	}
	return nil
}

查看官方文档
对BeforeDelete的描述

// 开始事务
BeforeDelete
// 删除 db 中的数据
AfterDelete
// 提交或回滚事务

具体使用

db.Transaction(func(tx *gorm.DB) error {
		//会自动调用前面定义的钩子
		if err := tx.Delete(&model.User{
			Model: gorm.Model{
				ID: Id, //必须在这里传入id,否则钩子不起作用
			},
		}, id).Error; err != nil {
			fmt.Println(err)
			return err
		}
		return nil
	})

如果传入id=1,自动调用钩子会返回一个错误信息:无法删除管理员,然后会自动回滚。
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
注意:
1.如果上面是这样调用的:

tx.Delete(&model.User{},1)

其他的不变,那么钩子将不起作用,因为id=1没有传入结构体
(大概)
2.钩子只能在事务中生效
3.本文只用了一种钩子,其他的钩子依葫芦画瓢就行 ^ _ ^

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值