callback_delete.go 985 B

123456789101112131415161718192021222324252627282930313233343536
  1. package gorm
  2. import "fmt"
  3. func BeforeDelete(scope *Scope) {
  4. scope.CallMethod("BeforeDelete")
  5. }
  6. func Delete(scope *Scope) {
  7. if !scope.HasError() {
  8. if !scope.Search.Unscope && scope.HasColumn("DeletedAt") {
  9. scope.Raw(
  10. fmt.Sprintf("UPDATE %v SET deleted_at=%v %v",
  11. scope.QuotedTableName(),
  12. scope.AddToVars(NowFunc()),
  13. scope.CombinedConditionSql(),
  14. ))
  15. } else {
  16. scope.Raw(fmt.Sprintf("DELETE FROM %v %v", scope.QuotedTableName(), scope.CombinedConditionSql()))
  17. }
  18. scope.Exec()
  19. }
  20. }
  21. func AfterDelete(scope *Scope) {
  22. scope.CallMethod("AfterDelete")
  23. }
  24. func init() {
  25. DefaultCallback.Delete().Register("gorm:begin_transaction", BeginTransaction)
  26. DefaultCallback.Delete().Register("gorm:before_delete", BeforeDelete)
  27. DefaultCallback.Delete().Register("gorm:delete", Delete)
  28. DefaultCallback.Delete().Register("gorm:after_delete", AfterDelete)
  29. DefaultCallback.Delete().Register("gorm:commit_or_rollback_transaction", CommitOrRollbackTransaction)
  30. }