fix preload issue

This commit is contained in:
daniel 2020-02-18 23:49:40 +08:00
parent 79a77d771d
commit 43fa18e4f6

View File

@ -4,10 +4,23 @@ import (
"errors" "errors"
"fmt" "fmt"
"reflect" "reflect"
"sort"
"strconv" "strconv"
"strings" "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 // preloadCallback used to preload associations
func preloadCallback(scope *Scope) { func preloadCallback(scope *Scope) {
if _, skip := scope.InstanceGet("gorm:skip_query_callback"); skip { if _, skip := scope.InstanceGet("gorm:skip_query_callback"); skip {
@ -33,6 +46,8 @@ func preloadCallback(scope *Scope) {
fields = scope.Fields() fields = scope.Fields()
) )
sort.Sort(searchPreloadSlice(scope.Search.preload))
for _, preload := range scope.Search.preload { for _, preload := range scope.Search.preload {
var ( var (
preloadFields = strings.Split(preload.schema, ".") preloadFields = strings.Split(preload.schema, ".")