From 49eaeacb892c8bb2de4a1ea70607eaaf4c15ab9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=BE=E4=B8=80=E9=A5=BC?= Date: Wed, 23 Jul 2025 13:02:49 +0800 Subject: [PATCH] optimize: field.ReflectValueOf (#7530) --- schema/field.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/schema/field.go b/schema/field.go index b5cd8d59..67e60f70 100644 --- a/schema/field.go +++ b/schema/field.go @@ -514,12 +514,19 @@ func (field *Field) setupValuerAndSetter(modelType reflect.Type) { // ReflectValueOf returns field's reflect value switch { case len(field.StructField.Index) == 1 && fieldIndex >= 0: - field.ReflectValueOf = func(ctx context.Context, value reflect.Value) reflect.Value { - return reflect.Indirect(value).Field(fieldIndex) + field.ReflectValueOf = func(ctx context.Context, v reflect.Value) reflect.Value { + v = reflect.Indirect(v) + if v.Type() != modelType { + return v.FieldByName(field.Name) + } + return v.Field(fieldIndex) } default: field.ReflectValueOf = func(ctx context.Context, v reflect.Value) reflect.Value { v = reflect.Indirect(v) + if v.Type() != modelType { + return v.FieldByName(field.Name) + } for idx, fieldIdx := range field.StructField.Index { if fieldIdx >= 0 { v = v.Field(fieldIdx)