创建插件

未匹配的标注
本文档最新版为 v2,旧版本可能放弃维护,推荐阅读最新版!

GORM 本身由 Callbacks 提供支持,因此你可以根据需要完全自定义GORM。

注册新的 callback

将 callback 注册进如 callbacks:

func updateCreated(scope *Scope) {
    if scope.HasColumn("Created") {
        scope.SetColumn("Created", NowFunc())
    }
}

db.Callback().Create().Register("update_created_at", updateCreated)
// 注册 Create 进程的回调

删除已有的 callback

从 callbacks 中删除一个 callback:

db.Callback().Create().Remove("gorm:create")
// delete callback `gorm:create` from Create callbacks

替换 callback

替换拥有相同名字的 callback :

db.Callback().Create().Replace("gorm:create", newCreateFunction)
// replace callback `gorm:create` with new function `newCreateFunction` for Create process

注册 callback 的顺序

在注册 callbacks 时设置顺序:

db.Callback().Create().Before("gorm:create").Register("update_created_at", updateCreated)
db.Callback().Create().After("gorm:create").Register("update_created_at", updateCreated)
db.Callback().Query().After("gorm:query").Register("my_plugin:after_query", afterQuery)
db.Callback().Delete().After("gorm:delete").Register("my_plugin:after_delete", afterDelete)
db.Callback().Update().Before("gorm:update").Register("my_plugin:before_update", beforeUpdate)
db.Callback().Create().Before("gorm:create").After("gorm:before_create").Register("my_plugin:before_create", beforeCreate)

自带的 Callbacks

GORM 在处理 CRUD 操作时自带了一些 Callback,建议你在写插件前先熟悉这些 Callback:

你可以用以下的方法来注册你的 Callback:

func updateTableName(scope *gorm.Scope) {
  scope.Search.Table(scope.TableName() + "_draft") // append `_draft` to table name
}

db.Callback().RowQuery().Register("publish:update_table_name", updateTableName)

请前往查看所有的 API ——  godoc.org/github.com/jinzhu/gorm 。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/gorm/v1/write_p...

译文地址:https://learnku.com/docs/gorm/v1/write_p...

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~