我很难在两个表上执行连接。
这是我在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]]。
提前感谢您的帮助。
答案 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。希望这可以帮助! :)