mirror of https://github.com/go-gorm/gorm.git
return empty slice for many2many if no asscociation was found
This commit is contained in:
parent
8b07437717
commit
2fb2c0d3b2
|
@ -391,14 +391,20 @@ func (scope *Scope) handleManyToManyPreload(field *Field, conditions []interface
|
||||||
key := toString(getValueFromFields(indirectScopeValue, foreignFieldNames))
|
key := toString(getValueFromFields(indirectScopeValue, foreignFieldNames))
|
||||||
fieldsSourceMap[key] = append(fieldsSourceMap[key], indirectScopeValue.FieldByName(field.Name))
|
fieldsSourceMap[key] = append(fieldsSourceMap[key], indirectScopeValue.FieldByName(field.Name))
|
||||||
}
|
}
|
||||||
for source, link := range linkHash {
|
|
||||||
for i, field := range fieldsSourceMap[source] {
|
for source, fields := range fieldsSourceMap {
|
||||||
|
for _, f := range fields {
|
||||||
//If not 0 this means Value is a pointer and we already added preloaded models to it
|
//If not 0 this means Value is a pointer and we already added preloaded models to it
|
||||||
if fieldsSourceMap[source][i].Len() != 0 {
|
if f.Len() != 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
field.Set(reflect.Append(fieldsSourceMap[source][i], link...))
|
|
||||||
|
v := reflect.MakeSlice(f.Type(), 0, 0)
|
||||||
|
if len(linkHash[source]) > 0 {
|
||||||
|
v = reflect.Append(f, linkHash[source]...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
f.Set(v)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -771,6 +771,7 @@ func TestNestedPreload11(t *testing.T) {
|
||||||
levelB3 := &LevelB3{
|
levelB3 := &LevelB3{
|
||||||
Value: "bar",
|
Value: "bar",
|
||||||
LevelB1ID: sql.NullInt64{Valid: true, Int64: int64(levelB1.ID)},
|
LevelB1ID: sql.NullInt64{Valid: true, Int64: int64(levelB1.ID)},
|
||||||
|
LevelB2s: []*LevelB2{},
|
||||||
}
|
}
|
||||||
if err := DB.Create(levelB3).Error; err != nil {
|
if err := DB.Create(levelB3).Error; err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
|
|
Loading…
Reference in New Issue