2016-09-23 48 views
1

如果我嘗試更新Slick中的不連續行,我想返回一個錯誤。Slick:如果零行更新時如何返回更新錯誤

我的查詢:

userPromotions.filter(promo => 
    promo.code === code).update(myUpdatedRow) 

查詢我嘗試做(我有一個錯誤的原因 「rowToUpdate.exist」 是代理商[布爾],而不是一個布爾值):

val rowToUpdate = userPromotions.filter(promo => promo.code === code) 
if(rowToUpdate.exist) rowToUpdate.update(myUpdatedRow) 
else NotFound 

有沒有辦法在單個查詢中做到這一點?

回答

5

如果您使用的油滑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 
你可以失敗交易