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])