mirror of https://github.com/go-gorm/gorm.git
Merge branch 'RichardKnop-bugfix/preload_indirect_zero_value_check'
This commit is contained in:
commit
b2a66e79e8
17
preload.go
17
preload.go
|
@ -10,8 +10,15 @@ import (
|
||||||
|
|
||||||
func getRealValue(value reflect.Value, columns []string) (results []interface{}) {
|
func getRealValue(value reflect.Value, columns []string) (results []interface{}) {
|
||||||
for _, column := range columns {
|
for _, column := range columns {
|
||||||
if reflect.Indirect(value).FieldByName(column).IsValid() {
|
pointedValue := reflect.Indirect(value)
|
||||||
result := reflect.Indirect(value).FieldByName(column).Interface()
|
// If v is a nil pointer, Indirect returns a zero Value!
|
||||||
|
// Therefor we need to check for a zero value,
|
||||||
|
// as FieldByName could panic
|
||||||
|
if !pointedValue.IsValid() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if pointedValue.FieldByName(column).IsValid() {
|
||||||
|
result := pointedValue.FieldByName(column).Interface()
|
||||||
if r, ok := result.(driver.Valuer); ok {
|
if r, ok := result.(driver.Valuer); ok {
|
||||||
result, _ = r.Value()
|
result, _ = r.Value()
|
||||||
}
|
}
|
||||||
|
@ -290,6 +297,12 @@ func (scope *Scope) handleManyToManyPreload(field *Field, conditions []interface
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// If v is a nil pointer, Indirect returns a zero Value!
|
||||||
|
// Therefor we need to check for a zero value,
|
||||||
|
// as FieldByName could panic
|
||||||
|
if !scope.IndirectValue().IsValid() {
|
||||||
|
return
|
||||||
|
}
|
||||||
object := scope.IndirectValue()
|
object := scope.IndirectValue()
|
||||||
source := getRealValue(object, associationForeignStructFieldNames)
|
source := getRealValue(object, associationForeignStructFieldNames)
|
||||||
field := object.FieldByName(field.Name)
|
field := object.FieldByName(field.Name)
|
||||||
|
|
Loading…
Reference in New Issue