callmethod.go 634 B

1234567891011121314151617181920212223
  1. package callbacks
  2. import (
  3. "reflect"
  4. "gorm.io/gorm"
  5. )
  6. func callMethod(db *gorm.DB, fc func(value interface{}, tx *gorm.DB) bool) {
  7. tx := db.Session(&gorm.Session{NewDB: true})
  8. if called := fc(db.Statement.ReflectValue.Interface(), tx); !called {
  9. switch db.Statement.ReflectValue.Kind() {
  10. case reflect.Slice, reflect.Array:
  11. db.Statement.CurDestIndex = 0
  12. for i := 0; i < db.Statement.ReflectValue.Len(); i++ {
  13. fc(reflect.Indirect(db.Statement.ReflectValue.Index(i)).Addr().Interface(), tx)
  14. db.Statement.CurDestIndex++
  15. }
  16. case reflect.Struct:
  17. fc(db.Statement.ReflectValue.Addr().Interface(), tx)
  18. }
  19. }
  20. }