教程 > gorm 教程 > 阅读:70

gorm 设置——迹忆客-ag捕鱼王app官网

gorm 提供了 set, get, instanceset, instanceget 方法来允许用户传值给 勾子 或其他方法

gorm 中有一些特性用到了这种机制,如迁移表格时传递表格选项。

// 创建表时添加表后缀
db.set("gorm:table_options", "engine=innodb").automigrate(&user{})

set / get

使用 set / get 传递设置到钩子方法,例如:

type user struct {
  gorm.model
  creditcard creditcard
  // ...
}
func (u *user) beforecreate(tx *gorm.db) error {
  myvalue, ok := tx.get("my_value")
  // ok => true
  // myvalue => 123
}
type creditcard struct {
  gorm.model
  // ...
}
func (card *creditcard) beforecreate(tx *gorm.db) error {
  myvalue, ok := tx.get("my_value")
  // ok => true
  // myvalue => 123
}
myvalue := 123
db.set("my_value", myvalue).create(&user{})

instanceset / instanceget

使用 instanceset / instanceget 传递设置到 *statement 的钩子方法,例如:

type user struct {
  gorm.model
  creditcard creditcard
  // ...
}
func (u *user) beforecreate(tx *gorm.db) error {
  myvalue, ok := tx.instanceget("my_value")
  // ok => true
  // myvalue => 123
}
type creditcard struct {
  gorm.model
  // ...
}
// 在创建关联时,gorm 创建了一个新 `*statement`,所以它不能读取到其它实例的设置
func (card *creditcard) beforecreate(tx *gorm.db) error {
  myvalue, ok := tx.instanceget("my_value")
  // ok => false
  // myvalue => nil
}
myvalue := 123
db.instanceset("my_value", myvalue).create(&user{})

查看笔记

扫码一下
查看教程更方便
网站地图