From 266a05273a06bfae67ab5c99b8c8dddda8bb515f Mon Sep 17 00:00:00 2001 From: jacking Date: Wed, 19 Sep 2018 16:14:16 +0800 Subject: [PATCH 1/2] adding function to get column's value --- scope.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/scope.go b/scope.go index 378025bd..d83bb083 100644 --- a/scope.go +++ b/scope.go @@ -238,6 +238,43 @@ func (scope *Scope) SetColumn(column interface{}, value interface{}) error { return errors.New("could not convert column to field") } +// GetColumn to get the column's value, column could be field or dbname +func (scope *Scope) GetColumn(column interface{}) (interface{}, error) { + + return scope.getColumn(column, false) +} + +// GetColumnByModelName to get column's value,column should be filed's name +func (scope *Scope) GetColumnByModelName(column string) (interface{}, error) { + + return scope.getColumn(column, true) +} + +// getColumn to get the column's value, column could be field or field's name/dbname +func (scope *Scope) getColumn(column interface{}, isModelName bool) (v interface{}, e error) { + + if field, ok := column.(*Field); ok { + + v = field.Field.Interface() + return + } + + for _, field := range *scope.fields { + + if isModelName && field.Name == column.(string) { + v = field.Field.Interface() + return + } + if !isModelName && field.DBName == column.(string) { + v = field.Field.Interface() + return + } + } + + e = errors.New("the field is not exist") + return +} + // CallMethod call scope value's method, if it is a slice, will call its element's method one by one func (scope *Scope) CallMethod(methodName string) { if scope.Value == nil { From ce7acb58660f6175e35ca95e9abf961c507a77de Mon Sep 17 00:00:00 2001 From: jacking Date: Thu, 20 Sep 2018 14:08:15 +0800 Subject: [PATCH 2/2] fix getcolumn bug --- scope.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scope.go b/scope.go index d83bb083..c8e92f06 100644 --- a/scope.go +++ b/scope.go @@ -259,7 +259,7 @@ func (scope *Scope) getColumn(column interface{}, isModelName bool) (v interface return } - for _, field := range *scope.fields { + for _, field := range scope.Fields() { if isModelName && field.Name == column.(string) { v = field.Field.Interface()