Я должен добавить 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
?