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名称)}