slick return 个结果

slick return single result

这个灵活的查询工作正常:

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)

但是,我怎样才能得到一行 (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)

我知道我可以使用 futureResult.map(_.headOption)。但我想知道 slick 是否允许指定单个结果(如我所愿)

像这样对数据库操作本身调用 .headOption

sql"""select * from company where id=$id""".as[Company].headOption

现在 db.run(query) returns Future[Option[Company]]。技术上 .head 也是可能的 return Future[Company] 但是它是不安全的。

考虑编写查询 in Scala instead of plain SQL,例如,应该可以像这样重写普通的 sql

 db.run {
    companies
      .filter(_.id === id)
      .take(1)
      .result
      .headOption
  }

其中 companiesTableQuery