【问题标题】:How to generate OR queries in .where() clause using Scala Slick 2.0?如何使用 Scala Slick 2.0 在 .where() 子句中生成 OR 查询?
【发布时间】:2014-07-04 09:20:10
【问题描述】:

我想在 Slick 查询的 where 方法中添加两个子句。我有以下代码:

val users = TableQuery[Users]
val actions = TableQuery[Acts]
val filteredUsers = users.where(.....) // Some condition
val acts = actions.where(_.domain === 10)
val ownerAct = acts.where(_.owner in filteredUsers)
val assigneeAct = acts.where(_.assignee in filteredUsers)

我想在过滤的用户中获取属于assigneeownerer 的操作。我希望代码是这样的:

val users = TableQuery[Users]
val actions = TableQuery[Acts]
val filteredUsers = users.where(.....) // Some condition
val acts = actions.where(_.domain === 10)

val ownerOrAssigneeAct = acts.where(_.owner in filteredUsers).
                                 or(_.assignee in filteredUsers)

如何使用 Scala Slick 2.0 在 .where() 中生成这样的 OR 查询?

【问题讨论】:

    标签: scala playframework playframework-2.2 slick


    【解决方案1】:

    有几件事,首先使用in你的查询必须返回一些东西,而不是

    val filteredUsers = users.where(.....)
    

    应该是(取自this answer):

    val filteredUsers = users.filter(/* condition */).map(_.id)
    

    假设你想匹配 ids,那么你可以简单地使用匿名函数来组合条件:

    val ownerOrAssigneeAct = 
      acts.filter(act => act.domain === 10 && (act.owner in filteredUsers || act.assignee in filteredUsers))
    

    请注意,我不使用where,因为它已被弃用,请改用filter

    【讨论】:

    • acts.filter(act => act.domain === 10).filter(act.owner in filteredUsers || act.assignee in filteredUsers)) 一样好。
    猜你喜欢
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 2018-01-03
    • 1970-01-01
    相关资源
    最近更新 更多