2016-08-15 88 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 能否请您发布包含解决方案的整个方法体? ,我有点困惑 –

相关问题