Slick 3.0将Rep(Bind)转换为值

时间:2015-06-30 12:45:20

标签: scala join type-conversion slick slick-3.0

我正在尝试使用Slicks 3.0 monadic连接加入两个表:

def getInfo(id: Int) = {

  val innerJoin = for {
    a <- tableA
    b <- tableB if a.id === b.s_id
  } yield b.name

  println(innerJoin) // results in Rep(Bind)

  innerJoin.map(println(_)) // results in Rep(Ref @1535257794)
}

现在我想从连接结果中获取值。我尝试了很多东西以获得价值,但它似乎比我想象的更难。当我尝试打印值时,我总是得到某种Rep(Bind)(参见上面的评论)。

还有这个post解决了同样的问题。我尝试了建议的解决方案,如下所示:

innerJoin.map(c => c).forEach(id =>
  println(id)
)

甚至没有编译,因为forEach没有在那个地方定义。我真的不知道如何在这里继续尝试下一步。有人可以帮助我吗?

谢谢...

1 个答案:

答案 0 :(得分:3)

代码中的

val innerJoin是一个灵活的查询,可以扩展/修改或转换为DBIOAction。动作可以在数据库上执行,最终会返回结果:

val action = innerJoin.result
val results: Future[Seq[String]] = db.run(action)

// finally use map to access your result
results.map(s => s.map(name => ...)  // s is of type Seq[String]

我认为你的理解回归String。因此,val results的类型为Future[Seq[String]]

另请查看http://slick.typesafe.com/doc/3.0.0/dbio.html#executing-database-i-o-actions