Slick 3.0 将 Rep(Bind) 转换为值

Slick 3.0 convert Rep(Bind) to value

我正在尝试使用 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) 返回(见上面的评论)。

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

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

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

谢谢...

val innerJoin 在您的代码中是一个灵活的查询,可以扩展/修改或变成 DBIOAction。一个动作是可以在数据库上执行的东西,它最终会 return 你的结果:

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