2015-07-24 2 views
2

У меня есть простой MySQL db с одной строкой в ​​таблице REG_PERIODS. Когда я запускаю этот запрос, я возвращаю строку.Slick headOption ничего не делает

val getRegPeriodAction = regPeriods.sortBy(_.endDate).result.head.map { regPeriod ⇒ 
    Logger.debug(s"regPeriod = ${regPeriod}") 

    regPeriod 
} 

Однако, когда я запускаю этот запрос, я ничего не получаю, на самом деле сообщение отладки даже не достигнуто!

val getRegPeriodAction = regPeriods.sortBy(_.endDate).result.headOption.map { regPeriodOption ⇒ 
    Logger.debug(s"regPeriodOption = ${regPeriodOption}") 

    regPeriodOption match { 
    case Some(regPeriod) ⇒ regPeriod 
    } 
} 

Я использую play-slick 1.0.0. Я что-то не понимаю? Должен ли я получать Some (regPeriod) при использовании headOption?

EDIT

Я попытался запустить в headOption запрос в db.run(...) и посылать результат другой функции, например, так:

def handleResult(opt: Option[RegistrationPeriod]) { 
    Logger.debug(s"received $opt") 
} 

for { 
    r <- db.run(regPeriods.sortBy(_.endDate.desc).result.headOption) 
    _ <- handleResult(r) 
} ... 

Странно то, что handleResult никогда называется! Как только я сменю код для вызова head вместо headOption, все работает так, как ожидалось.

+1

ли вы решить вашу проблему уже? Вы уверены, что 'result.headOption' возвращает непустую' Option'? 'handleResult()' будет вызываться только, если 'Option' имеет значение. – Roman

+0

Doh! Конечно, он возвращает «Нет», и поскольку handleResult находится в понимании, это не называется! Мне нужно выполнить проверку значения 'r' перед обработкой результата. – Oli

ответ

4

.result не выполняет ваш запрос в базе данных. Это создает действие, которое должно быть передано в db.run() или db.stream() для того, чтобы выполнить его:

val action = regPeriods.sortBy(_.endDate).result.headOption 
val result: Future[Option[RegPeriod]] = db.run(action) 

// accessing your data 
result.map(r => r....) // r is of type Option[RegPeriod] 
+0

Спасибо за быстрый ответ, к сожалению, это не то, что вызывает проблему. См. Мое редактирование – Oli

 Смежные вопросы

  • Нет связанных вопросов^_^