我需要在所有创建执行失败后执行一些事情。
看起来可以满足callbacks
,但是有一种情况,如果它是事务中的一个操作,它实际上可能不会被执行。我需要在rollback
Treat之后做相应的操作。问题是,如何拦截rollback
?
您可以在这样的函数中使用手动事务。
func CreateAnimals(db *gorm.DB) error {
// Note the use of tx as the database handle once you are within a transaction
tx := db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
if err := tx.Error; err != nil {
return err
}
if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil {
tx.Rollback()
return err
}
if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil {
tx.Rollback()
return err
}
return tx.Commit().Error
}
如果CreateAnimals
失败,那么你可以做你想做的工作。