How to generate OR queries in .where() clause using Scala Slick 2.0?

playframework, playframework-2.2, scala, slick

Solution

There are a couple of things, first to use `in` your query must return something, instead of

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

Should be (taken from this answer):

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

Assumed that you want to match on ids, then you can compose conditions simply using an anonymous function:

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

Note that I'm not using `where` since it's deprecated, use `filter` instead.

Problem

I want to add two clauses in `where` method of Slick query. I have fllowing code: ``` 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) ``` I want to fetch actions which belong to either of `assignee` or `ownerer` in filtered users. I want code to be something like this: ``` 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) ``` How can I generate such an OR query in .where() using Scala Slick 2.0?

Original source