Scala 如何检查Play Slick filter是否返回了一些行或空结果?
我有下面的代码,返回Scala 如何检查Play Slick filter是否返回了一些行或空结果?,scala,slick,play-slick,Scala,Slick,Play Slick,我有下面的代码,返回Future[选项[密码]] db.run(passwords.filter { x => x.providerID === loginInfo.providerID && x.providerKey === loginInfo.providerKey }.result.headOption) 我想做的是如下伪代码所示: if above query returns no results do nothing else re
Future[选项[密码]]
db.run(passwords.filter {
x => x.providerID === loginInfo.providerID && x.providerKey === loginInfo.providerKey
}.result.headOption)
我想做的是如下伪代码所示:
if above query returns no results
do nothing
else
return new PasswordInfo(abovequeryresult.hasher, abovequeryresult.password, abovequeryresult.salt)
我是Scala的新手,对此一无所知。尝试使用下面示例中的flatMap
,但上述db.run()
的flatMap
签名不同
find(loginInfo).flatMap {
case Some(_) => update(loginInfo, authInfo)
case None => add(loginInfo, authInfo)
}
我正在使用Play Slick 1.1.1版我想你的问题更多的是关于如何在Scala中操纵。如果您的
db.run
代码在播放控制器的动作中运行,最好的选择是将动作声明为async
,并将查询结果映射到Play.api.mvc.result
。大概是这样的:
def someAction = Action.async {
find(loginInfo).map {
case Some(authInfo) =>
update(loginInfo, authInfo)
Ok("Updated AuthInfo") //Return a play.api.mvc.Resul
case None =>
add(loginInfo, authInfo)
Created("CreatedAuthInfo") //Return another play.api.mvc.Resul
}
}
或者如果你只想要结果
val future = find(loginInfo)
future.onSuccess {
case Some(authInfo) => update(loginInfo, authInfo)
case None => add(loginInfo, authInfo)
}
Await.ready(future, Duration.Inf)
我认为你的问题更多的是关于如何在Scala中操纵。如果您的
db.run
代码在播放控制器的动作中运行,最好的选择是将动作声明为async
,并将查询结果映射到Play.api.mvc.result
。大概是这样的:
def someAction = Action.async {
find(loginInfo).map {
case Some(authInfo) =>
update(loginInfo, authInfo)
Ok("Updated AuthInfo") //Return a play.api.mvc.Resul
case None =>
add(loginInfo, authInfo)
Created("CreatedAuthInfo") //Return another play.api.mvc.Resul
}
}
或者如果你只想要结果
val future = find(loginInfo)
future.onSuccess {
case Some(authInfo) => update(loginInfo, authInfo)
case None => add(loginInfo, authInfo)
}
Await.ready(future, Duration.Inf)
update/add
返回什么flatMap
希望在其主体中有一个选项[T]
,更新/添加
返回什么flatMap
要求在其主体中有一个选项[T]