update.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package callbacks
  2. import (
  3. "reflect"
  4. "github.com/jinzhu/gorm"
  5. )
  6. func BeforeUpdate(db *gorm.DB) {
  7. if db.Statement.Schema != nil && (db.Statement.Schema.BeforeSave || db.Statement.Schema.BeforeUpdate) {
  8. callMethod := func(value interface{}) bool {
  9. var ok bool
  10. if db.Statement.Schema.BeforeSave {
  11. if i, ok := value.(gorm.BeforeSaveInterface); ok {
  12. ok = true
  13. i.BeforeSave(db)
  14. }
  15. }
  16. if db.Statement.Schema.BeforeUpdate {
  17. if i, ok := value.(gorm.BeforeUpdateInterface); ok {
  18. ok = true
  19. i.BeforeUpdate(db)
  20. }
  21. }
  22. return ok
  23. }
  24. if ok := callMethod(db.Statement.Dest); !ok {
  25. switch db.Statement.ReflectValue.Kind() {
  26. case reflect.Slice, reflect.Array:
  27. for i := 0; i <= db.Statement.ReflectValue.Len(); i++ {
  28. callMethod(db.Statement.ReflectValue.Index(i).Interface())
  29. }
  30. case reflect.Struct:
  31. callMethod(db.Statement.ReflectValue.Interface())
  32. }
  33. }
  34. }
  35. }
  36. func Update(db *gorm.DB) {
  37. }
  38. func AfterUpdate(db *gorm.DB) {
  39. if db.Statement.Schema != nil && (db.Statement.Schema.AfterSave || db.Statement.Schema.AfterUpdate) {
  40. callMethod := func(value interface{}) bool {
  41. var ok bool
  42. if db.Statement.Schema.AfterSave {
  43. if i, ok := value.(gorm.AfterSaveInterface); ok {
  44. ok = true
  45. i.AfterSave(db)
  46. }
  47. }
  48. if db.Statement.Schema.AfterUpdate {
  49. if i, ok := value.(gorm.AfterUpdateInterface); ok {
  50. ok = true
  51. i.AfterUpdate(db)
  52. }
  53. }
  54. return ok
  55. }
  56. if ok := callMethod(db.Statement.Dest); !ok {
  57. switch db.Statement.ReflectValue.Kind() {
  58. case reflect.Slice, reflect.Array:
  59. for i := 0; i <= db.Statement.ReflectValue.Len(); i++ {
  60. callMethod(db.Statement.ReflectValue.Index(i).Interface())
  61. }
  62. case reflect.Struct:
  63. callMethod(db.Statement.ReflectValue.Interface())
  64. }
  65. }
  66. }
  67. }