Skip to content

Commit 9af6d51

Browse files
committed
Fix query when map keys include table-qualified column names, close #7507
1 parent c63374f commit 9af6d51

File tree

2 files changed

+10
-0
lines changed

2 files changed

+10
-0
lines changed

statement.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,9 @@ func (stmt *Statement) BuildCondition(query interface{}, args ...interface{}) []
364364

365365
for _, key := range keys {
366366
column := clause.Column{Name: key, Table: curTable}
367+
if strings.Contains(key, ".") {
368+
column = clause.Column{Name: key}
369+
}
367370
conds = append(conds, clause.Eq{Column: column, Value: v[key]})
368371
}
369372
case map[string]interface{}:
@@ -376,6 +379,9 @@ func (stmt *Statement) BuildCondition(query interface{}, args ...interface{}) []
376379
for _, key := range keys {
377380
reflectValue := reflect.Indirect(reflect.ValueOf(v[key]))
378381
column := clause.Column{Name: key, Table: curTable}
382+
if strings.Contains(key, ".") {
383+
column = clause.Column{Name: key}
384+
}
379385
switch reflectValue.Kind() {
380386
case reflect.Slice, reflect.Array:
381387
if _, ok := v[key].(driver.Valuer); ok {

tests/query_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1127,6 +1127,10 @@ func TestSearchWithMap(t *testing.T) {
11271127
DB.First(&user, map[string]interface{}{"name": users[0].Name})
11281128
CheckUser(t, user, users[0])
11291129

1130+
user = User{}
1131+
DB.First(&user, map[string]interface{}{"users.name": users[0].Name})
1132+
CheckUser(t, user, users[0])
1133+
11301134
user = User{}
11311135
DB.Where(map[string]interface{}{"name": users[1].Name}).First(&user)
11321136
CheckUser(t, user, users[1])

0 commit comments

Comments
 (0)