2015-06-04 54 views
5

我試圖運行一個查詢,如.filter(_.id === 1).firstOption但編譯器抱怨沒有符號firstOption。這是刪除光滑3?我可以用什麼來代替?使用`firstOption`和光滑的3

+1

另外,您可能會找到[遷移指南](http://slick.typesafe.com/doc/3.0.0/upgrade.html#first)很有幫助。 – stewSquared

回答

12

要在調用結果之前限制結果數,請使用take(num)。例如像這樣:

val result: Future[Option[Whatever]] = db.run((query.filter(_.id === 1).take(1)).result).map(_.headOption) 

根據官方文檔,上面的語句歸結於結果的方法使用headOption

val result: Future[Option[Whatever]] = db.run((query.filter(_.id === 1)).result.headOption) 

query.resultDBIOAction返回類型的對象。光滑的動作是可以在數據庫上執行的。通過將操作傳遞給db.run()db.stream()來完成實際執行。您可以在此處找到更詳細的解釋:http://slick.typesafe.com/doc/3.0.0/api/index.html#slick.dbio.DBIOAction

+0

但是'head'和'headOption'只對查詢調用'result'後才起作用 – simao

+0

查看我更新的答案。希望有所幫助。 – Roman

+0

本例中使用的'.headOption'與原來的'.firstOption'不同,因爲它在'Seq'而不是'Query'上被調用。第一段是錯誤的。 –