我必须or
使用参数值向查询添加条件。
例子:select * from users where email = "abc@xyz.com" or phone="1234123412";
用户可以发送两个字段或只发送一个。我想在每个字段的循环中执行此操作,并在or where
条件下添加它们中的每一个。
val query = Users.selectAll()
**var predicates = Op.build { Users.id inList listOf<Int>()}**
for((k, v) in params) {
val value = URLDecoder.decode(v.first(), "UTF-8")
predicates = when(k) {
"email" -> predicates.or(Users.email eq value)
"phone" -> predicates.or(Users.phone eq value)
}
}
query.andWhere { predicates }
上面的 DSL 产生下面的 SQL。
SELECT * from users where (((false = true) OR (users.email = "abc@xyz.com")) OR (users.phone = "1234567890"))
看到了false = true
吗?那是因为,要使用.or
方法,我必须使用条件进行初始化。下面给出的代码片段是添加用于初始化谓词的不必要的代码行。
var predicates = Op.build { Users.id inList listOf<Int>()}
初始化它的正确方法是什么,以便我可以无缝地将多个or
和and
谓词添加到查询中?