Scan value into ignored fields if there is no ambiguity

This commit is contained in:
Jinzhu 2015-12-11 11:45:22 +08:00
parent 8ee49893d1
commit 341703ed5d
2 changed files with 24 additions and 21 deletions

View File

@ -62,10 +62,12 @@ func (scope *Scope) Fields() map[string]*Field {
indirectValue := scope.IndirectValue() indirectValue := scope.IndirectValue()
isStruct := indirectValue.Kind() == reflect.Struct isStruct := indirectValue.Kind() == reflect.Struct
for _, structField := range modelStruct.StructFields { for _, structField := range modelStruct.StructFields {
if isStruct { if field, ok := fields[structField.DBName]; !ok || field.IsIgnored {
fields[structField.DBName] = getField(indirectValue, structField) if isStruct {
} else { fields[structField.DBName] = getField(indirectValue, structField)
fields[structField.DBName] = &Field{StructField: structField, IsBlank: true} } else {
fields[structField.DBName] = &Field{StructField: structField, IsBlank: true}
}
} }
} }

View File

@ -149,24 +149,25 @@ func (scope *Scope) GetModelStruct() *ModelStruct {
if fieldStruct.Tag.Get("sql") == "-" { if fieldStruct.Tag.Get("sql") == "-" {
field.IsIgnored = true field.IsIgnored = true
} else {
sqlSettings := parseTagSetting(field.Tag.Get("sql"))
gormSettings := parseTagSetting(field.Tag.Get("gorm"))
if _, ok := gormSettings["PRIMARY_KEY"]; ok {
field.IsPrimaryKey = true
modelStruct.PrimaryFields = append(modelStruct.PrimaryFields, field)
}
if _, ok := sqlSettings["DEFAULT"]; ok {
field.HasDefaultValue = true
}
if value, ok := gormSettings["COLUMN"]; ok {
field.DBName = value
} else {
field.DBName = ToDBName(fieldStruct.Name)
}
} }
sqlSettings := parseTagSetting(field.Tag.Get("sql"))
gormSettings := parseTagSetting(field.Tag.Get("gorm"))
if _, ok := gormSettings["PRIMARY_KEY"]; ok {
field.IsPrimaryKey = true
modelStruct.PrimaryFields = append(modelStruct.PrimaryFields, field)
}
if _, ok := sqlSettings["DEFAULT"]; ok {
field.HasDefaultValue = true
}
if value, ok := gormSettings["COLUMN"]; ok {
field.DBName = value
} else {
field.DBName = ToDBName(fieldStruct.Name)
}
fields = append(fields, field) fields = append(fields, field)
} }
} }