diff --git a/callback_query_preload.go b/callback_query_preload.go index a936180a..40e186cb 100644 --- a/callback_query_preload.go +++ b/callback_query_preload.go @@ -4,10 +4,23 @@ import ( "errors" "fmt" "reflect" + "sort" "strconv" "strings" ) +type searchPreloadSlice []searchPreload + +func (s searchPreloadSlice) Len() int { + return len(s) +} +func (s searchPreloadSlice) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} +func (s searchPreloadSlice) Less(i, j int) bool { + return s[i].schema < s[j].schema +} + // preloadCallback used to preload associations func preloadCallback(scope *Scope) { if _, skip := scope.InstanceGet("gorm:skip_query_callback"); skip { @@ -33,6 +46,8 @@ func preloadCallback(scope *Scope) { fields = scope.Fields() ) + sort.Sort(searchPreloadSlice(scope.Search.preload)) + for _, preload := range scope.Search.preload { var ( preloadFields = strings.Split(preload.schema, ".")