Write Plugins

GORM は Callbacks によってフルカスタマイズすることができます

新たに callback を登録します

Register a callback into callbacks

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

db.Callback().Create().Register("update_created_at", updateCreated)
// register a callback for Create process

callback を削除します

Delete a callback from callbacks

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

callback を置き換えます

Replace a callback having same name with new one

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

順序付きで callback を登録します

Register callbacks with orders

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)

定義済みの Callback

GORM has defiend callbacks to perform CRUD operations, check them out before start write your plugins

Row Query callbacks will be called when perform Row or Rows, there are no registered callbacks by default, you could register a new one like:

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)

View https://godoc.org/github.com/jinzhu/gorm to view all available API