GORMには Set, Get, InstanceSet, InstanceGet メソッドがあり、これらを使うことで hooks や他のメソッドに値を受け渡すことができます。
GORMは、マイグレーション時にテーブルの作成オプションを渡す場合など、いくつかの機能でこれを使用します。
db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&User{})
|
Set / Get
Set / Get を使用して hookメソッドに設定を受け渡すことができます。例:
type User struct { gorm.Model CreditCard CreditCard }
func (u *User) BeforeCreate(tx *gorm.DB) error { myValue, ok := tx.Get("my_value") }
type CreditCard struct { gorm.Model }
func (card *CreditCard) BeforeCreate(tx *gorm.DB) error { myValue, ok := tx.Get("my_value") }
myValue := 123 db.Set("my_value", myValue).Create(&User{})
|
InstanceSet / InstanceGet
InstanceSet / InstanceGet を使用して、現在の *Statement のhookメソッドに設定を受け渡すことができます。
type User struct { gorm.Model CreditCard CreditCard }
func (u *User) BeforeCreate(tx *gorm.DB) error { myValue, ok := tx.InstanceGet("my_value") }
type CreditCard struct { gorm.Model }
func (card *CreditCard) BeforeCreate(tx *gorm.DB) error { myValue, ok := tx.InstanceGet("my_value") }
myValue := 123 db.InstanceSet("my_value", myValue).Create(&User{})
|