0

我正在尝试使用像这样的 Slicks 3.0 monadic joins 加入两个表:

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 没有在那个地方定义。我真的不知道如何在这里继续下一步要尝试什么。有人可以帮我吗?

谢谢...

4

1 回答 1

4

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]

我假设你的理解返回 a String。因此 的类型val resultsFuture[Seq[String]]

也看看http://slick.typesafe.com/doc/3.0.0/dbio.html#executing-database-io-actions

于 2015-06-30T13:04:41.827 回答