add before find hook,we need split table with it

This commit is contained in:
dino.ma 2022-01-27 13:53:29 +08:00
parent e5894ca449
commit 0535bd67ee
4 changed files with 28 additions and 1 deletions

View File

@ -50,6 +50,7 @@ func RegisterDefaultCallbacks(db *gorm.DB, config *Config) {
queryCallback := db.Callback().Query()
queryCallback.Register("gorm:query", Query)
queryCallback.Register("gorm:preload", Preload)
queryCallback.Register("gorm:before_query", BeforeQuery)
queryCallback.Register("gorm:after_query", AfterQuery)
queryCallback.Clauses = config.QueryClauses

View File

@ -34,6 +34,10 @@ type AfterDeleteInterface interface {
AfterDelete(*gorm.DB) error
}
type BeforeFindInterface interface {
BeforeFind(*gorm.DB) error
}
type AfterFindInterface interface {
AfterFind(*gorm.DB) error
}

View File

@ -228,6 +228,28 @@ func Preload(db *gorm.DB) {
}
}
func BeforeQuery(db *gorm.DB) {
if db.Error == nil && db.Statement.Schema != nil && !db.Statement.SkipHooks && db.Statement.Schema.BeforeFind {
callMethod(db, func(value interface{}, tx *gorm.DB) (called bool) {
if db.Statement.Schema.BeforeFind {
if i, ok := value.(BeforeFindInterface); ok {
called = true
db.AddError(i.BeforeFind(tx))
}
}
if db.Statement.Schema.BeforeFind {
if i, ok := value.(BeforeFindInterface); ok {
called = true
db.AddError(i.BeforeFind(tx))
}
}
return called
})
}
}
func AfterQuery(db *gorm.DB) {
if db.Error == nil && db.Statement.Schema != nil && !db.Statement.SkipHooks && db.Statement.Schema.AfterFind && db.RowsAffected > 0 {
callMethod(db, func(value interface{}, tx *gorm.DB) bool {

View File

@ -36,7 +36,7 @@ type Schema struct {
BeforeUpdate, AfterUpdate bool
BeforeDelete, AfterDelete bool
BeforeSave, AfterSave bool
AfterFind bool
BeforeFind, AfterFind bool
err error
initialized chan struct{}
namer Namer