Slick 3 简单加入表格

Slick 3 simple join on tables

我很难尝试对两个表执行连接。

这是我在 Scala 中的模型:

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

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

我需要获取所有参加活动的用户。早些时候,在 slick 2.0 中,我的 User DAO 中的一个简单的 for-comprehension 正在做这项工作:

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

在 slick 3.0 中,我完全不知道如何实现这种简单的连接。如今,在 Slick 3.0 中,它应该 return 一个 Future[List[User]].

在此先感谢您的帮助。

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。希望这可以帮助! :)