オブジェクトのライフサイクル
Hooks は 作成/取得/更新/削除 処理の前後に呼び出される関数です。
指定のメソッドをモデルに対して定義すると、作成・更新・取得・削除時にそのメソッドが自動的に呼び出されます。 定義したメソッドが返した場合、GORMは以降の操作を中止し、トランザクションをロールバックします。
func(*gorm.DB) error
が Hooks メソッドの型となります。
Hooks
オブジェクトの作成
作成処理時に利用可能なHooks
// begin transaction |
コード例:
func (u *User) BeforeCreate(tx *gorm.DB) (err error) { |
注意 デフォルトでは、GORMでの保存/削除操作はトランザクション内で実行されます。 つまり、トランザクション内で行われた変更はコミットされるまで参照できません。Hookメソッドがエラーを返却した場合、変更はロールバックされます。
func (u *User) AfterCreate(tx *gorm.DB) (err error) { |
オブジェクトの更新
更新処理時に利用可能なHooks
// begin transaction |
コード例:
func (u *User) BeforeUpdate(tx *gorm.DB) (err error) { |
オブジェクトの削除
削除処理時に利用可能なHooks
// begin transaction |
コード例:
// 同一トランザクション内でのデータの更新 |
オブジェクトを取得する
取得処理時に利用可能なHooks
// load data from database |
コード例:
func (u *User) AfterFind(tx *gorm.DB) (err error) { |
現在の操作を変更する
func (u *User) BeforeCreate(tx *gorm.DB) error { |