【问题标题】:Slick 3 simple join on tables表上的 Slick 3 简单连接
【发布时间】:2016-05-05 15:02:21
【问题描述】:

我很难尝试在两个表上执行联接。

这是我在 Scala 中的模型:

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

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

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

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

在 slick 3.0 中,我根本不知道如何实现这个简单的连接。如今,在 Slick 3.0 中,它应该返回一个 Future[List[User]]。

提前感谢您的帮助。

【问题讨论】:

    标签: scala slick slick-3.0


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      相关资源
      最近更新 更多