this slick query works correctly:
val db = Database.forConfig("slick-mysql")
val query: SqlStreamingAction[Vector[Company], Company, Effect] = sql"""select * from company""".as[Company]
val futureResult: Future[Vector[Company]] = db.run(query)
However, how can I get a single row (Future[Company]
)?
val id = 1
val query = sql"""select * from company where id=$id""".as[Company] // make it a single value (head or headOption)
val futureResult: Future[Company] = db.run(query)
I am aware that I could use futureResult.map(_.headOption)
. But I wonder if slick allows to specify a single result (as i anorm)
Try calling .headOption
on the db action itself like so
sql"""select * from company where id=$id""".as[Company].headOption
Now db.run(query)
returns Future[Option[Company]]
. Technically .head
is also possible which would return Future[Company]
however it is unsafe.
Consider writing queries in Scala instead of plain SQL, for example, it should be possible to rewrite plain sql like so
db.run {
companies
.filter(_.id === id)
.take(1)
.result
.headOption
}
where companies
is TableQuery
.