2016-08-15 105 views
0

我剛剛開始使用Slick,我做了一個簡單的hello世界項目,發佈帖子和評論。如何將Slick結果映射到不同的數據結構?

我想有以下數據結構:

Seq[(Post, Option[Seq[Comment]])] 

然後,我可以遍歷意見,像這樣:

@for(p <- posts) { 
     @for(c <- posts.comments) { 
      @comment.title 
     } 
} 

這是我的查詢:

def allWithComments = { 


    val q = for { 
     (p, c) <- Posts join Comments on (_.id === _.postsId) 
    } yield (p,c) // do here something fancy and map the result 



    db.run(q.result) 

    } 

查詢現在返回以下結構:

Seq[(models.Post, models.Comment)] 

回答

0

Seq[(models.Post, models.Comment)]Seq[(Post, Option[Seq[Comment]])]您可以使用以下方法:

(qResult groupBy (_._1) map { case (k,v) => (k, Option((v map (_._2)).toSeq)) }).toSeq 
+0

qResult從哪裏來? –

+0

'qResult'是'db.run(q.result)' – ryan

+0

您可以發佈包含解決方案的整個方法體嗎? ,我有點困惑。 –

0

我覺得下面的變量s代表你的「文章的結構上加入(評論_.id === _.postsId )「查詢。要獲得對帖子的所有評論,您可以在下一行執行操作。

val s = List((1,"sam"),(2,"s"),(1,"a"),(3,"sadk")) 
s.groupBy(_._1).map({case (p,c) => (p,c.map(_._2))}).toSeq //ArrayBuffer((2,List(s)), (1,List(sam, a)), (3,List(sadk))) 
+0

我不明白,那是什麼? –

+0

它只是一個示例數據結構,我認爲它類似於您的連接查詢。您可以將元組的第一個值視爲後ID,將第二個值視爲註釋。我只是展示了一種從數據結構轉換到你想要的結構的方法。 – Samar

+0

同樣在這裏: \t 能否請您發佈包含解決方案的整個方法體? ,我有點困惑 –