From a24417824d2a6e03c2a4d54703e5f8e0266e3139 Mon Sep 17 00:00:00 2001 From: Jinzhu Date: Tue, 18 Aug 2015 07:43:08 +0800 Subject: [PATCH] More improvements for preload many2many --- preload.go | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/preload.go b/preload.go index 773d6dd8..de90077a 100644 --- a/preload.go +++ b/preload.go @@ -203,7 +203,7 @@ func (scope *Scope) handleHasManyToManyPreload(field *Field, conditions []interf } var sourceKeys []string - var linkHash = make(map[string][]interface{}) + var linkHash = make(map[string][]reflect.Value) for _, key := range joinTableHandler.SourceForeignKeys() { sourceKeys = append(sourceKeys, key.DBName) @@ -272,26 +272,17 @@ func (scope *Scope) handleHasManyToManyPreload(field *Field, conditions []interf for j := 0; j < objects.Len(); j++ { object := reflect.Indirect(objects.Index(j)) source := getRealValue(object, relation.AssociationForeignStructFieldNames) - links := linkHash[toString(source)] - - for i := 0; i < len(links); i++ { - f := object.FieldByName(field.Name) - a := links[i].(reflect.Value) - f.Set(reflect.Append(f, a)) - continue + field := object.FieldByName(field.Name) + for _, link := range linkHash[toString(source)] { + field.Set(reflect.Append(field, link)) } } } else { object := scope.IndirectValue() source := getRealValue(object, relation.AssociationForeignStructFieldNames) - - links := linkHash[toString(source)] - - for i := 0; i < len(links); i++ { - f := object.FieldByName(field.Name) - a := links[i].(reflect.Value) - f.Set(reflect.Append(f, a)) - continue + field := object.FieldByName(field.Name) + for _, link := range linkHash[toString(source)] { + field.Set(reflect.Append(field, link)) } } }