From 9af6d510b58c7691fa33694004c404032208f84f Mon Sep 17 00:00:00 2001 From: Jinzhu Date: Tue, 22 Jul 2025 14:21:04 +0800 Subject: [PATCH] Fix query when map keys include table-qualified column names, close #7507 --- statement.go | 6 ++++++ tests/query_test.go | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/statement.go b/statement.go index 0218064e..ba5d3f18 100644 --- a/statement.go +++ b/statement.go @@ -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 { diff --git a/tests/query_test.go b/tests/query_test.go index 19cdeb59..6151855e 100644 --- a/tests/query_test.go +++ b/tests/query_test.go @@ -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])