delete.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package callbacks
  2. import (
  3. "reflect"
  4. "github.com/jinzhu/gorm"
  5. )
  6. func BeforeDelete(db *gorm.DB) {
  7. if db.Statement.Schema != nil && db.Statement.Schema.BeforeDelete {
  8. callMethod := func(value interface{}) bool {
  9. if db.Statement.Schema.BeforeDelete {
  10. if i, ok := value.(gorm.BeforeDeleteInterface); ok {
  11. i.BeforeDelete(db)
  12. return true
  13. }
  14. }
  15. return false
  16. }
  17. if ok := callMethod(db.Statement.Dest); !ok {
  18. switch db.Statement.ReflectValue.Kind() {
  19. case reflect.Slice, reflect.Array:
  20. for i := 0; i <= db.Statement.ReflectValue.Len(); i++ {
  21. callMethod(db.Statement.ReflectValue.Index(i).Interface())
  22. }
  23. case reflect.Struct:
  24. callMethod(db.Statement.ReflectValue.Interface())
  25. }
  26. }
  27. }
  28. }
  29. func Delete(db *gorm.DB) {
  30. }
  31. func AfterDelete(db *gorm.DB) {
  32. if db.Statement.Schema != nil && db.Statement.Schema.AfterDelete {
  33. callMethod := func(value interface{}) bool {
  34. if db.Statement.Schema.AfterDelete {
  35. if i, ok := value.(gorm.AfterDeleteInterface); ok {
  36. i.AfterDelete(db)
  37. return true
  38. }
  39. }
  40. return false
  41. }
  42. if ok := callMethod(db.Statement.Dest); !ok {
  43. switch db.Statement.ReflectValue.Kind() {
  44. case reflect.Slice, reflect.Array:
  45. for i := 0; i <= db.Statement.ReflectValue.Len(); i++ {
  46. callMethod(db.Statement.ReflectValue.Index(i).Interface())
  47. }
  48. case reflect.Struct:
  49. callMethod(db.Statement.ReflectValue.Interface())
  50. }
  51. }
  52. }
  53. }