Add getPrimaryKey: analize the tag string in the struct fields and find the one marked as primaryKey
This commit is contained in:
parent
5574d47f1f
commit
e16601cdc0
@ -10,6 +10,7 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
"go/ast"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (scope *Scope) primaryCondiation(value interface{}) string {
|
func (scope *Scope) primaryCondiation(value interface{}) string {
|
||||||
@ -472,3 +473,27 @@ func (scope *Scope) autoMigrate() *Scope {
|
|||||||
}
|
}
|
||||||
return scope
|
return scope
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (scope *Scope) getPrimaryKey() string {
|
||||||
|
indirectValue := reflect.Indirect(reflect.ValueOf(scope.Value))
|
||||||
|
|
||||||
|
if !indirectValue.IsValid() {
|
||||||
|
return "id"
|
||||||
|
}
|
||||||
|
|
||||||
|
scopeTyp := indirectValue.Type()
|
||||||
|
for i := 0; i < scopeTyp.NumField(); i++ {
|
||||||
|
fieldStruct := scopeTyp.Field(i)
|
||||||
|
if !ast.IsExported(fieldStruct.Name) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// if primaryKey tag found, return column name
|
||||||
|
if fieldStruct.Tag.Get("primaryKey") != "" {
|
||||||
|
return toSnake(fieldStruct.Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//If primaryKey tag not found, fallback to id
|
||||||
|
return "id"
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user