Scala slick 3.0选择然后插入
我想插入一个具有不同状态值的新行(如果该行存在),并将新实例作为Scala slick 3.0选择然后插入,scala,slick-3.0,Scala,Slick 3.0,我想插入一个具有不同状态值的新行(如果该行存在),并将新实例作为Some返回给调用者。如果它不存在,则什么也不发生并返回None。我所拥有的是 def revoke(name: String, issueFor: String): Future[MyLicense] = { val retrieveLicense = slickLicenses.filter(l => l.name === name && l.issueFor === issueFor). so
Some
返回给调用者。如果它不存在,则什么也不发生并返回None
。我所拥有的是
def revoke(name: String, issueFor: String): Future[MyLicense] = {
val retrieveLicense = slickLicenses.filter(l => l.name === name && l.issueFor === issueFor).
sortBy(_.modifiedOn.desc).result.headOption
val insertLicense = for {
licenseOption <- retrieveLicense
} yield {
licenseOption match {
case Some(l) => Some(slickLicenses += l.copy(status = RevokedLicense))
case None => None
}
}
db.run(insertLicense).map {r =>
r.map { dbLicense => MyLicense(dbLicense.name, dbLicense.status)
}
def revoke(名称:String,发行人:String):未来[MyLicense]={
val retrieveLicense=slickLicenses.filter(l=>l.name==name&&l.issueFor==issueFor)。
排序方式(uu.modifiedOn.desc).result.headOption
val insertLicense=用于{
licenseOption部分(slickLicenses+=l.copy(状态=撤销许可))
案例无=>无
}
}
db.run(insertLicense).map{r=>
r、 map{dbLicense=>MyLicense(dbLicense.name,dbLicense.status)
}
}
我该如何解决这个问题
编辑1
我把密码改成
override def revoke(name: String, issueFor: String): Future[String] = {
val retrieveLicense = slickLicenses.filter(l => l.name === name && l.issueFor === issueFor).
sortBy(_.modifiedOn.desc).result.headOption
val insertLicenseAction = for {
l <- retrieveLicense
newLicense <- slickLicenses += l.get.copy(status = RevokedLicense)
} yield newLicense
db.run(insertLicenseAction).map(_ => name)
override def revoke(名称:String,发行者:String):Future[String]={
val retrieveLicense=slickLicenses.filter(l=>l.name==name&&l.issueFor==issueFor)。
排序方式(uu.modifiedOn.desc).result.headOption
val insertLicenseAction=for{
这就是我最后做的
override def revoke(name: String, issueFor: String): Future[String] = {
val retrieveLicense = slickLicenses.filter(l => l.name === name && l.issueFor === issueFor).
sortBy(_.modifiedOn.desc).result.headOption
val insertLicenseAction = for {
l <- retrieveLicense
_ <- l.map(x => slickLicenses += x.copy(status = RevokedLicense,
modifiedOn = new Timestamp(System.currentTimeMillis())))
.getOrElse(DBIO.successful(l))
} yield ()
db.run(insertLicenseAction).map(x => name)}
override def revoke(名称:String,发行者:String):Future[String]={
val retrieveLicense=slickLicenses.filter(l=>l.name==name&&l.issueFor==issueFor)。
排序方式(uu.modifiedOn.desc).result.headOption
val insertLicenseAction=for{
l名称)}