Merge 9d73acb064876480e3dd66c4b75ef5df82b59f06 into d7400c2df4ba6eafb8114bc369fd28eacf443dc5

This commit is contained in:
lame-nickname 2014-07-29 10:38:54 +00:00
commit 22cc54a946

View File

@ -231,10 +231,10 @@ func (scope *Scope) CombinedConditionSql() string {
// Fields get value's fields // Fields get value's fields
func (scope *Scope) Fields() []*Field { func (scope *Scope) Fields() []*Field {
indirectValue := reflect.Indirect(reflect.ValueOf(scope.Value)) indirectValue := reflect.Indirect(reflect.ValueOf(scope.Value))
fields := []*Field{} fields := make(map[string]*Field)
if !indirectValue.IsValid() { if !indirectValue.IsValid() {
return fields return []*Field{}
} }
scopeTyp := indirectValue.Type() scopeTyp := indirectValue.Type()
@ -244,12 +244,24 @@ func (scope *Scope) Fields() []*Field {
continue continue
} }
value := indirectValue.FieldByName(fieldStruct.Name)
iface := value.Interface()
elem := reflect.Indirect(value)
if fieldStruct.Anonymous && elem.Kind() == reflect.Struct {
for _, f := range scope.New(iface).Fields() {
if _, ok := fields[f.Name]; !ok {
fields[f.Name] = f
}
}
continue
}
var field Field var field Field
field.Name = fieldStruct.Name field.Name = fieldStruct.Name
field.DBName = ToSnake(fieldStruct.Name) field.DBName = ToSnake(fieldStruct.Name)
value := indirectValue.FieldByName(fieldStruct.Name) field.Value = iface
field.Value = value.Interface()
field.IsBlank = isBlank(value) field.IsBlank = isBlank(value)
// Search for primary key tag identifier // Search for primary key tag identifier
@ -267,7 +279,6 @@ func (scope *Scope) Fields() []*Field {
field.SqlTag = scope.sqlTagForField(&field) field.SqlTag = scope.sqlTagForField(&field)
// parse association // parse association
elem := reflect.Indirect(value)
typ := elem.Type() typ := elem.Type()
switch elem.Kind() { switch elem.Kind() {
@ -296,10 +307,14 @@ func (scope *Scope) Fields() []*Field {
} }
} }
} }
fields = append(fields, &field) fields[field.Name] = &field
} }
return fields field_list := make([]*Field, len(fields))
for _, field := range fields {
append(field_list, field)
}
return field_list
} }
// Raw set sql // Raw set sql