2016-05-03 32 views
0

我很难试图在两个表上执行联接。油滑3简单加入表

这是我在斯卡拉模型:

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]]。

在此先感谢您的帮助。

回答

2

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

内连接:

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

现在你通过UserSeq[(User, Event)],所以你组,你会得到用户的事件。

注:我没有测试这个 ...

参见教程的repo也。希望这可以帮助! :)