2016-05-03 7 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は仕事をしていました:滑らかな3.0で

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

、私はすべて参加し、この単純なを達成する方法を見つけ出すことはできませんよ。現在、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) 

は今、あなたはUserによってSeq[(User, Event)]ので、あなたのグループを持っていて、ユーザーのイベントを取得します。

注:私はこのをテストしていない...

もチュートリアルのrepoを参照してください。お役に立てれば! :)