Slick 3简单连接表

时间:2016-05-03 21:51:55

标签: scala slick slick-3.0

我很难在两个表上执行连接。

这是我在Scala中的模型:

case class Event(idEvent: Int, blablabla)
case class User(idUser: Int, blablabla)
case class UserParticipatesToEvent(idUser: Int, idEvent: Int)

基本上,用户可以参加许多不同的活动。

我需要获取参加活动的所有用户。早些时候,在光滑的2.0中,我的用户DAO中的一个简单的理解就是完成这项工作:

def findUsersByEvent(idEvent: Int): List[User] = {
   (for {
     userIds <- EventDAO.findIDUsersByEvent(idEvent)
     res <- this.findUserById(userIds)
   } yield(res))
}

在光滑的3.0中,我完全无法弄清楚如何实现这个简单的连接。如今,在Slick 3.0中,它应该返回Future [List [User]]。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

Here你已经很好地解释了如何进行简单连接,并加入了很多表(就像你的情况一样)。 你基本上有2个选项,内连接(可以使用if语句进行理解)或外连接(左连接或右连接)。

内部联接:

val usersWithEvents = for {
  ((user, _), event) <- UserTable.join(UserEventTable).on(_.userId === _.userId).
                   join(EventTable).on(_._2.eventId === _.eventId)
} yield(user, event)

现在您已Seq[(User, Event)],因此按User分组,您将获得用户的活动。

注意:我没有测试 ...

另请参阅教程的repo。希望这可以帮助! :)