2014-12-09 2 views
0

У меня есть несколько таблиц, и мне нужно вернуть их все вместе с запросом Slick.Комплекс Slick Join Query

case class A(id: Int, name: String) 
case class B(id: Int, name: String) 
case class C(id: Int, name: String) 
case class AtoC(aId: Int, dId: Int) 
case class D(id: Int, name: String) 

Предполагая, что у меня есть определения таблицы, соответствующие описанные выше классы случае, я хочу, чтобы вернуть что-то вроде (A, B, C, Seq[D]), но я не могу найти способ, чтобы написать его там, где он будет даже скомпилировать.

Я пытался что-то вроде этого:

for { 
    a <- AQuery.innerJoin(B).... 
    ... 
    AtoC <~ a.innerJoin(AtoCQuery).on(....) 

, но это не будет даже скомпилировать.

ответ

0

попробовать что-то вроде этого:

val q = for (
    ((((A, B), AtoC), C), D) 
    <- AQuery.innerJoin(BQuery).on(_.id === _.id) // A.id == B.id 
    .innerJoin(AtoCQuery).on(_._1.id === _.aId) // A.id == AtoC.aId 
    .innerJoin(CQuery).on(_._2.cId === _.id)  // AtoC.cId == C.aId 
    .innerJoin(DQuery).on(_._1._1._1.id === _.id) // A.id == D.id 
) yield (A, B, C, D) 
val result = q.run 

Этот код не проверяется. Надеюсь, это поможет!

С уважением

+0

Спасибо! Кажется, что это работает, но как я могу получить в конечном итоге желаемый кортеж: '(A, B, C, Seq [D])' '' Seq [D] 'часть является разницей? – Benny

+0

Попробуйте заменить D на выходе (A, B, C, D) с другим для понимания, что-то вроде '(A, B, C, (для (...) yield D) .list)' –

+0

'D' в этот контекст, однако, не повторяется, так что будет ли содержание моего для понимания? – Benny

 Смежные вопросы

  • Нет связанных вопросов^_^