オブジェクトのライフサイクル
フックとは生成/参照/更新/削除の前後に呼ばれる関数のことです。
モデルに特定のメソッドを定義すると、生成、更新、参照、削除の時に自動的に呼ばれます。コールバックからエラーを返した場合、GORMはそれ以降の操作を停止して現在のトランザクションをロールバックします。
フック
オブジェクトの生成
生成に使えるフック
// トランザクションの開始 |
コード例:
func (u *User) BeforeSave() (err error) { |
メモ GORMにおける保存と削除の操作はデフォルトでトランザクション内で実行されます。そのため、トランザクション内での変更はコミットするまで可視化されません。 フック内からこれらの変更にアクセスしたい場合は、現在のトランザクションをフックの引数として受け入れます。例:
func (u *User) AfterCreate(tx *gorm.DB) (err error) { |
オブジェクトの更新
更新に使えるフック
// トランザクション開始 |
コード例:
func (u *User) BeforeUpdate() (err error) { |
オブジェクトの削除
削除に使えるフック
// トランザクション開始 |
コード例:
// 同一のトランザクション内でデータを更新する |
オブジェクトの参照
参照に使えるフック
// データベースからのデータロード |
コード例:
func (u *User) AfterFind() (err error) { |