Slick:如果更新零行,如何在更新时返回错误

Loa*_*ado 1 scala playframework slick

如果我尝试在Slick中更新一个不存在的行,我想返回一个错误.

我的查询:

userPromotions.filter(promo =>
  promo.code === code).update(myUpdatedRow)
Run Code Online (Sandbox Code Playgroud)

我试图做的查询(我有一个错误原因"rowToUpdate.exist"是Rep [Boolean]而不是布尔值):

val rowToUpdate = userPromotions.filter(promo => promo.code === code)
if(rowToUpdate.exist) rowToUpdate.update(myUpdatedRow)
else NotFound
Run Code Online (Sandbox Code Playgroud)

有没有办法在单个查询中执行此操作?

pam*_*amu 6

如果您使用Slick 3.0及更高版本

DBIO.failed当更新的行数为0时,使用您可能会使事务失败

userPromotions.filter(_.code === code).update(myUpdatedRow).flatMap { updatedRows =>
  if (updatedRows == 0) DBIO.failed(new Exception("0 rows updated"))
  else DBIO.successful(updatedRows)
}.transactionally
Run Code Online (Sandbox Code Playgroud)