我正在尝试让一个函数在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(_ => ())
}
答案 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}}。