Update GormFieldValuer
This commit is contained in:
parent
0ca42129fa
commit
061aea8d7e
@ -409,8 +409,8 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field {
|
||||
return field
|
||||
}
|
||||
|
||||
type GORMValuer interface {
|
||||
GormValue(context.Context, *Field) (interface{}, error)
|
||||
type GormFieldValuer interface {
|
||||
GormFieldValue(context.Context, *Field) (interface{}, bool)
|
||||
}
|
||||
|
||||
// create valuer, setter when parse struct
|
||||
@ -420,12 +420,20 @@ func (field *Field) setupValuerAndSetter() {
|
||||
case len(field.StructField.Index) == 1:
|
||||
field.ValueOf = func(ctx context.Context, value reflect.Value) (interface{}, bool) {
|
||||
fieldValue := reflect.Indirect(value).Field(field.StructField.Index[0])
|
||||
return fieldValue.Interface(), fieldValue.IsZero()
|
||||
fv, zero := fieldValue.Interface(), fieldValue.IsZero()
|
||||
if vr, ok := fv.(GormFieldValuer); ok {
|
||||
fv, zero = vr.GormFieldValue(ctx, field)
|
||||
}
|
||||
return fv, zero
|
||||
}
|
||||
case len(field.StructField.Index) == 2 && field.StructField.Index[0] >= 0:
|
||||
field.ValueOf = func(ctx context.Context, value reflect.Value) (interface{}, bool) {
|
||||
fieldValue := reflect.Indirect(value).Field(field.StructField.Index[0]).Field(field.StructField.Index[1])
|
||||
return fieldValue.Interface(), fieldValue.IsZero()
|
||||
fv, zero := fieldValue.Interface(), fieldValue.IsZero()
|
||||
if vr, ok := fv.(GormFieldValuer); ok {
|
||||
fv, zero = vr.GormFieldValue(ctx, field)
|
||||
}
|
||||
return fv, zero
|
||||
}
|
||||
default:
|
||||
field.ValueOf = func(ctx context.Context, value reflect.Value) (interface{}, bool) {
|
||||
@ -448,7 +456,11 @@ func (field *Field) setupValuerAndSetter() {
|
||||
}
|
||||
}
|
||||
}
|
||||
return v.Interface(), v.IsZero()
|
||||
fv, zero := v.Interface(), v.IsZero()
|
||||
if vr, ok := fv.(GormFieldValuer); ok {
|
||||
fv, zero = vr.GormFieldValue(ctx, field)
|
||||
}
|
||||
return fv, zero
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user