Exposed DAO如何根据传入参数添加多个过滤条件API ".find"

How to add multiple filter conditions based on incoming parameters to the Exposed DAO API ".find"

我正在使用 kotlin 编写一个 dropwizard 应用程序,其中一种资源方法将接收多个参数(电子邮件、phone、is_deleted 等)。根据传入的查询参数,我必须过滤 table。我正在使用 Exposed 的 DAO API 来构造查询。

val result = User.find { //SqlExpressionBuilder Users.isDeleted eq false Users.email eq "so@soso.com" }.sortedByDescending { it.createdAt }

如何使用 for in 循环向基于查询参数映射的查询添加多个 where 条件?

我不得不使用 DSL 解决问题。似乎 DAO 没有这样的规定来创建这样的临时查询。

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。

希望对某人有所帮助。