5

我需要分开where以有条件地验证值,示例

email := "test@test.com"
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 '%test@test.com%'

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

但我只需要一个查询的结果:

 SELECT "users".* FROM "users" WHERE users.email LIKE '%test@test.com%' and users.name LIKE '%jhon%'

谢谢!

4

1 回答 1

14

我相信这应该有效:

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

所有的 Gorm 方法都Where返回一个可以链接的结果。这意味着你可以继续调用它的方法,直到你得到你喜欢的东西。

于 2016-03-24T04:53:45.650 回答