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
}
其中 companies
是 TableQuery
。
这个灵活的查询工作正常:
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
}
其中 companies
是 TableQuery
。