オブジェクトのライフサイクル
フックとは、作成/クエリ/更新/削除の前後に呼び出される関数のことです。
モデルに特定のメソッドを定義した場合、作成、更新、クエリ、削除時に自動的に呼び出され、コールバックがエラーを返した場合、GORMは今後の操作を停止し、現在のトランザクションをロールバックします。
フックメソッドの型はfunc(*gorm.DB) error
である必要があります。
フック
オブジェクトの作成
作成に使用可能なフック
// begin transaction |
コード例
func (u *User) BeforeCreate(tx *gorm.DB) (err error) { |
注意 GORMでの保存/削除操作はデフォルトでトランザクション内で実行されるため、トランザクションがコミットされるまでそのトランザクションで行われた変更は表示されません。フックでエラーを返した場合、変更はロールバックされます。
func (u *User) AfterCreate(tx *gorm.DB) (err error) { |
オブジェクトの更新
更新に使用可能なフック
// begin transaction |
コード例
func (u *User) BeforeUpdate(tx *gorm.DB) (err error) { |
オブジェクトの削除
削除に使用可能なフック
// begin transaction |
コード例
// Updating data in same transaction |
オブジェクトのクエリ
クエリに使用可能なフック
// load data from database |
コード例
func (u *User) AfterFind(tx *gorm.DB) (err error) { |
現在の操作の変更
func (u *User) BeforeCreate(tx *gorm.DB) error { |