GORM - CB

1.1 Create

// begin transaction
BeforeSave
BeforeCreate
// save before-associations
// update timestamp `CreatedAt`, `UpdatedAt`
// save self
// reload fields that have default value and its value is blank
// save after-associations
AfterCreate
AfterSave
// commit or rollback transaction

1.2 Update

// begin transaction
BeforeSave
BeforeUpdate
// save before-associations
// update timestamp `UpdatedAt`
// save self
// save after-associations
AfterUpdate
AfterSave
// commit or rollback transaction

1.3 Delete

// begin transaction
BeforeDelete
// delete self
AfterDelete
// commit or rollback transaction

1.4 Find

// load data from database
// Preloading (edger loading)
AfterFind

2. Example

func (u *User) BeforeUpdate() (err error) {
    if u.readonly() {
        err = errors.New("read only user")
    }
    return
}

func (u *User) AfterCreate() (err error) {
    if (u.Id > 1000) {
        err = errors.New("user id is already greater than 1000")
    }
    return
}

change during crud

func (u *User) AfterCreate(tx *gorm.DB) (err error) {
    tx.Model(u).Update("role", "admin")
    return
}
func (u *User) AfterCreate(scope *gorm.Scope) (err error) {
  scope.DB().Model(u).Update("role", "admin")
    return
}

Last updated

Was this helpful?