光滑更新返回更新的对象

时间:2015-10-15 04:11:03

标签: scala slick

我正在尝试让一个函数在db现在对查询运行更新方法后返回更新的对象,但我无法弄清楚如何成功返回该对象。这是我用我发现的例子编写的函数,但我想扩展q.update(cat)以返回Future [Cat]。

def update(id: Long, cat: Cat): Future[Unit] = db.run {
  val q = for { c <- cats if c.id === id } yield c
  q.update(cat).map(_ => ())
}

1 个答案:

答案 0 :(得分:2)

您应该尝试以下方法:

def update(id: Long, cat: Cat): Future[Option[Cat]] = db.run {
  cats.filter(_.id === id).update(cat).map {
    case 0 => None
    case _ => Some(cat)
  }
}

您应该返回Future[Option[Cat]]而不是Future[Cat],因为提供ID的cat可能不存在(update方法返回0值)。违反完整性约束将导致Failure的{​​{1}}。