2017-12-29 4 views
0
매끄러운

에 쿼리를 존재하지만 테이블 ID === ID로되지 않은 행을 수행하는 경우에는 false를 반환합니다. 나는 이것을 바꾸고 싶다. 내 수정 내가 우는 소리</p> <pre><code>override def isOnList(id: Long, value: String)(implicit ex: ExecutionContext): DBIO[Boolean] = { tableQuery.filter(e => e.id === id && e.isActive && e.value === value).exists.result } </code></pre> <p>같은 쿼리를

override def isOnList(id: Long, value: String)(implicit ex: ExecutionContext): DBIO[Boolean] = { 
    tableQuery.filter(e => e.id === id && e.isActive).result.flatMap { 
     case seq if seq.isEmpty => DBIOAction.successful(true) 
     case seq => DBIOAction.successful(seq.exists(_.value==value)) 
    } 
    } 

나는 매끄러운과 새로운 오전

, 그래서 난 그게 좋은 해결책 또는하지 (내가 어떤 정보를 찾을 수 없습니다 coud.) 알고 싶습니다? 오, 깜짝 놀랐습니다. 이드는 고유하지 않습니다.

+0

두 조건을 조합하면됩니다. '.... flatMap (seq => DBIOAction.successful (seq.isEmpty || seq.exists (_. value == value)))' – jwvh

답변

1

첫 번째 옵션에 어떤 문제가 있습니까? 그것은 완벽하게 유효하게 보인다!

def isOnList(id: Long, value: String)(implicit ex: ExecutionContext) : Future[Boolean] = 
    db.run(User.filter(e => e.id === id && e.isActive && e.value === value).exists.result) 

이 메서드는 필터 조건에 따라 자동으로 true 또는 false를 반환합니다.

+0

"그러나 테이블에 id == 인 행이 없으면 false를 반환합니다 = id. 이걸 바꾸고 싶습니다. " 내 수정 사실이 반환됩니다. 첫 번째 옵션으로 false가 아닙니다. 테이블이 비어있을 때 첫 번째 솔루션은 false를 반환하고 두 번째 솔루션은 true를 반환합니다. 차이점은 다음과 같습니다. – mB2B

관련 문제

 관련 문제