2016-05-03 45 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也。希望這可以幫助! :)