Don't use value's first field to guess data type for struct implements GormDataTypeInterface

This commit is contained in:
Jinzhu 2020-07-17 12:02:00 +08:00
parent 362779575c
commit 6dc583869b
1 changed files with 21 additions and 19 deletions

View File

@ -105,6 +105,7 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field {
// if field is valuer, used its value or first fields as data type // if field is valuer, used its value or first fields as data type
valuer, isValuer := fieldValue.Interface().(driver.Valuer) valuer, isValuer := fieldValue.Interface().(driver.Valuer)
if isValuer { if isValuer {
if _, ok := fieldValue.Interface().(GormDataTypeInterface); !ok {
var overrideFieldValue bool var overrideFieldValue bool
if v, err := valuer.Value(); v != nil && err == nil { if v, err := valuer.Value(); v != nil && err == nil {
overrideFieldValue = true overrideFieldValue = true
@ -132,6 +133,7 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field {
} }
} }
} }
}
if dbName, ok := field.TagSettings["COLUMN"]; ok { if dbName, ok := field.TagSettings["COLUMN"]; ok {
field.DBName = dbName field.DBName = dbName