Fix query when map keys include table-qualified column names, close #7507
This commit is contained in:
parent
c63374f5d1
commit
9af6d510b5
@ -364,6 +364,9 @@ func (stmt *Statement) BuildCondition(query interface{}, args ...interface{}) []
|
||||
|
||||
for _, key := range keys {
|
||||
column := clause.Column{Name: key, Table: curTable}
|
||||
if strings.Contains(key, ".") {
|
||||
column = clause.Column{Name: key}
|
||||
}
|
||||
conds = append(conds, clause.Eq{Column: column, Value: v[key]})
|
||||
}
|
||||
case map[string]interface{}:
|
||||
@ -376,6 +379,9 @@ func (stmt *Statement) BuildCondition(query interface{}, args ...interface{}) []
|
||||
for _, key := range keys {
|
||||
reflectValue := reflect.Indirect(reflect.ValueOf(v[key]))
|
||||
column := clause.Column{Name: key, Table: curTable}
|
||||
if strings.Contains(key, ".") {
|
||||
column = clause.Column{Name: key}
|
||||
}
|
||||
switch reflectValue.Kind() {
|
||||
case reflect.Slice, reflect.Array:
|
||||
if _, ok := v[key].(driver.Valuer); ok {
|
||||
|
@ -1127,6 +1127,10 @@ func TestSearchWithMap(t *testing.T) {
|
||||
DB.First(&user, map[string]interface{}{"name": users[0].Name})
|
||||
CheckUser(t, user, users[0])
|
||||
|
||||
user = User{}
|
||||
DB.First(&user, map[string]interface{}{"users.name": users[0].Name})
|
||||
CheckUser(t, user, users[0])
|
||||
|
||||
user = User{}
|
||||
DB.Where(map[string]interface{}{"name": users[1].Name}).First(&user)
|
||||
CheckUser(t, user, users[1])
|
||||
|
Loading…
x
Reference in New Issue
Block a user