diff --git a/callbacks.go b/callbacks.go index 3e6723a1..315eea17 100644 --- a/callbacks.go +++ b/callbacks.go @@ -109,10 +109,12 @@ func (p *processor) Execute(db *DB) { } // call scopes - scopes := stmt.scopes - stmt.scopes = nil - for _, scope := range scopes { - db = scope(db) + for len(stmt.scopes) > 0 { + scopes := stmt.scopes + stmt.scopes = nil + for _, scope := range scopes { + db = scope(db) + } } for _, f := range p.fns { diff --git a/migrator.go b/migrator.go index 40936ef9..f39dd9fd 100644 --- a/migrator.go +++ b/migrator.go @@ -8,10 +8,12 @@ import ( // Migrator returns migrator func (db *DB) Migrator() Migrator { // apply scopes to migrator - scopes := db.Statement.scopes - db.Statement.scopes = nil - for _, scope := range scopes { - db = scope(db) + for len(db.Statement.scopes) > 0 { + scopes := db.Statement.scopes + db.Statement.scopes = nil + for _, scope := range scopes { + db = scope(db) + } } return db.Dialector.Migrator(db.Session(&Session{}))