这个问题是关于 slick 3.0 或 3.1(我对此很灵活)
我有一个使用 map
处理的中间查询, for
等,以获得我想要的结果。最后我有一个
val foo: DBIOAction[Seq[MySchema.Bar], NoStream, Effect.Read]
现在我有一个
val bar: TableQuery[MySchema.Bar]
我想在其中插入 foo 。如果 foo 是
Seq
我可以简单地做 bar ++= foo
,但事实并非如此。我发现的唯一方法是通过等待结果来实现它。像这样
val query = (bar ++= Await.result(db.run(foo), Duration.Inf))
显然
query
需要在某个时候使用 db.run
运行.但现在我有两个数据库运行。在一次运行中拥有所有东西不是更好吗?有一个更好的方法吗?
最佳答案
DBIOAction
有 map
/flatMap
函数,所以你可以写一些类似的东西
val insertAction = foo.flatMap(bar ++= _)
insertAction
类型为 DBIOAction[Int, NoStream, Effect.Write]
或类似的东西(我不完全确定 Int
和效果),然后您可以像任何 DBIOAction
一样在数据库上运行它使用 db.run
;然后你得到的是整个查询和插入结果的 future 。
关于斯卡拉 + 光滑 3 : Inserting the result of one query into another table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34970333/