2016-03-23 3 views
1

мне нужен отдельный where в запросе для проверки значений с условным, ПримерГорм: отделить где в запросе

email := "[email protected]" 
if email != "" { 
    db.Where("users.email LIKE ?", "%"+email+"%") 
} 
db.Where("users.name like ?", "%"+jhon+"%").Find(&users) 

Возвращает два запроса:

1: SELECT "users".* FROM "users" WHERE users.email LIKE '%[email protected]%'

2: SELECT "users".* FROM "users" WHERE users.name LIKE '%jhon%'

, но мне нужно только в одном запросе:

SELECT "users".* FROM "users" WHERE users.email LIKE '%[email protected]%' and users.name LIKE '%jhon%' 

ответ

3

Я считаю, что это должно работать:

chain := db.Where("users.name like ?", "%"+jhon+"%") 
email := "[email protected]" 
if email != "" { 
    chain = chain.Where("users.email LIKE ?", "%"+email+"%") 
} 
chain.Find(&users) 

Все методы Горм как Where возвращают результат, который является цепной. Это означает, что вы можете продолжать вызывать методы на нем, пока не получите что-то, что вам нравится.

+0

Perfect, большое спасибо. – kalelc

Смежные вопросы