有一个带有键值的表。
还有一个自动递增PK的表。
从第一个表中获取密钥的值。如果不存在插入和 返还默认值。 基于它查询其他表。
返回过滤结果和值。
所以我可以试试:
def lastLogs(limit: Long = 666): Future[(Long, Seq[VLogEntry])] = {
val q: DBIO[(Long, Seq[VLogEntry])] = {
for {
existing <- kvTable.filter(_.key === "log").result.headOption
conf = existing getOrElse KV(key = "log", value = "0")
last = conf.value.toLong
rds = vLogTable.filter(_.id > last).take(limit).result
_ <- kvTable.insertOrUpdate(conf)
} yield {
(last, rds)
}
}
db.run(q)
}
这会产生编译错误:
found : HipDAO.this.domain.dbConfig.profile.StreamingProfileAction[Seq[HipDAO.this.domain.VLogTable ...
required: Seq[db.types.Types.VLogEntry]
在Slick 2中,我可以在会话中调用查询列表或结果。 我如何在Slick 3中进行此操作。
答案 0 :(得分:0)
经历了可以做的迭代,我来到了:
def lastLogs(limit: Long = 666): Future[(Long, Seq[VLogEntry])] = {
val q: DBIO[(Long, Seq[VLogEntry])] = {
for {
existing <- kvTable.filter(_.key === "log").result.headOption
conf = existing getOrElse KV(key = "log", value = "0")
_ <- kvTable.insertOrUpdate(conf)
last = conf.value.toLong
rds <- vLogTable.filter(_.id > last).take(limit).result
} yield {
(last, rds)
}
}
db.run(q)
}
由于差异只有2个字符,这似乎很容易解决。
互联网缺乏StreamingProfileAction
以及如何阅读此消息。
一些见解可能来自阅读essential slick 3
最终,我是如何看到它的,它是一个monad,你应该对它进行平面映射。