for FieldSchema.LookUpField or column Alias Delimiter
This commit is contained in:
parent
b7d4fe1a34
commit
10ef50b606
@ -121,7 +121,7 @@ func BuildQuerySQL(db *gorm.DB) {
|
||||
clauseSelect.Columns = append(clauseSelect.Columns, clause.Column{
|
||||
Table: tableAliasName,
|
||||
Name: s,
|
||||
Alias: tableAliasName + "__" + s,
|
||||
Alias: tableAliasName + gorm.DoubleUnderscore + s,
|
||||
})
|
||||
}
|
||||
|
||||
|
17
scan.go
17
scan.go
@ -10,6 +10,11 @@ import (
|
||||
"gorm.io/gorm/schema"
|
||||
)
|
||||
|
||||
const (
|
||||
// DoubleUnderscore for FieldSchema.LookUpField or column Alias Delimiter
|
||||
DoubleUnderscore = "__"
|
||||
)
|
||||
|
||||
func prepareValues(values []interface{}, db *DB, columnTypes []*sql.ColumnType, columns []string) {
|
||||
if db.Statement.Schema != nil {
|
||||
for idx, name := range columns {
|
||||
@ -121,9 +126,9 @@ func Scan(rows *sql.Rows, db *DB, initialized bool) {
|
||||
for idx, column := range columns {
|
||||
if field := Schema.LookUpField(column); field != nil && field.Readable {
|
||||
fields[idx] = field
|
||||
} else if names := strings.Split(column, "__"); len(names) > 1 {
|
||||
} else if names := strings.Split(column, DoubleUnderscore); len(names) > 1 {
|
||||
if rel, ok := Schema.Relationships.Relations[names[0]]; ok {
|
||||
if field := rel.FieldSchema.LookUpField(strings.Join(names[1:], "__")); field != nil && field.Readable {
|
||||
if field := rel.FieldSchema.LookUpField(strings.Join(names[1:], DoubleUnderscore)); field != nil && field.Readable {
|
||||
fields[idx] = field
|
||||
|
||||
if len(joinFields) == 0 {
|
||||
@ -200,9 +205,9 @@ func Scan(rows *sql.Rows, db *DB, initialized bool) {
|
||||
for idx, column := range columns {
|
||||
if field := Schema.LookUpField(column); field != nil && field.Readable {
|
||||
values[idx] = reflect.New(reflect.PtrTo(field.IndirectFieldType)).Interface()
|
||||
} else if names := strings.Split(column, "__"); len(names) > 1 {
|
||||
} else if names := strings.Split(column, DoubleUnderscore); len(names) > 1 {
|
||||
if rel, ok := Schema.Relationships.Relations[names[0]]; ok {
|
||||
if field := rel.FieldSchema.LookUpField(strings.Join(names[1:], "__")); field != nil && field.Readable {
|
||||
if field := rel.FieldSchema.LookUpField(strings.Join(names[1:], DoubleUnderscore)); field != nil && field.Readable {
|
||||
values[idx] = reflect.New(reflect.PtrTo(field.IndirectFieldType)).Interface()
|
||||
continue
|
||||
}
|
||||
@ -219,9 +224,9 @@ func Scan(rows *sql.Rows, db *DB, initialized bool) {
|
||||
for idx, column := range columns {
|
||||
if field := Schema.LookUpField(column); field != nil && field.Readable {
|
||||
field.Set(db.Statement.ReflectValue, values[idx])
|
||||
} else if names := strings.Split(column, "__"); len(names) > 1 {
|
||||
} else if names := strings.Split(column, DoubleUnderscore); len(names) > 1 {
|
||||
if rel, ok := Schema.Relationships.Relations[names[0]]; ok {
|
||||
if field := rel.FieldSchema.LookUpField(strings.Join(names[1:], "__")); field != nil && field.Readable {
|
||||
if field := rel.FieldSchema.LookUpField(strings.Join(names[1:], DoubleUnderscore)); field != nil && field.Readable {
|
||||
relValue := rel.Field.ReflectValueOf(db.Statement.ReflectValue)
|
||||
value := reflect.ValueOf(values[idx]).Elem()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user