栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

GORM中钩子的简单使用

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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.本文只用了一种钩子,其他的钩子依葫芦画瓢就行 ^ _ ^

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/908723.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号