Как добавить несколько условий фильтрации на основе входящих параметров в Exposed DAO API ".find"
Я пишу приложение dropwizard, используя kotlin, и один из методов ресурса получит несколько параметров (электронная почта, телефон, is_deleted и т. Д.). Исходя из параметров входящего запроса, я должен отфильтровать таблицу. Я использую DAO API Exposed для построения запроса.
val result = User.find { //SqlExpressionBuilder
Users.isDeleted eq false
Users.email eq "so@soso.com"
}.sortedByDescending { it.createdAt }
Как добавить несколько условий условия в запрос на основе карты параметров запроса, используя цикл for?
2 ответа
Мне пришлось решить проблему с помощью DSL. Похоже, DAO не имеет такого положения для создания такого запроса adhoc.
val query = Users.selectAll()
for((k, v) in params) {
val value = URLDecoder.decode(v, "UTF-8")
when(value) {
"email" -> query.andWhere { Users.email eq value }
"phone" -> query.andWhere { Users.phone eq value }
}
}
return query.andWhere { Users.isDeleted.eq(false) }
Как уже упоминалось @Tapac, можно использовать User.wrapRows(query).sortedByDescending()
также создайте такой запрос, но опять же нужно использовать DSL.
Надеюсь, что это помогает кому-то.
Возможно:
val email = URLDecoder.decode("email", "UTF-8")
val phone = URLDecoder.decode("phone", "UTF-8")
Users.find {
if (email != null) (Users.email eq email) else Op.TRUE
.and(if (phone != null) (Users.phone eq phone) else Op.TRUE)
}