у меня есть запрос, как ниже
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
}
Но он возвращает false, когда таблица не содержит строк с id === id. Я бы хотел изменить это. Мое изменение
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))
}
}
Я новичок в slick, поэтому мне хотелось бы знать, что это хорошее решение или нет (я не могу найти информацию.)? О, я забыл, Ид не уникален.
Что не так с вашим первым вариантом? Кажется, это совершенно верно!
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 в зависимости от состояния фильтра!