如何使用 case 类 进行灵活的 SQL 插值?
How can I use case classes with slicks TSQL interpolator?
sql
内插器允许 classes 作为给定 GetResult 实例的结果
val action:DBIO[Seq[VisibilityRow]] = sql"SELECT * FROM visibility".as[VisibilityRow] //compiles fine
Checking the docs,我没有看到使用 tsql
和案例 class.
的示例
我决定试一试
val action2:DBIO[Seq[VisibilityRow]] = tsql"SELECT * FROM visibility"
但是我遇到了错误
[error] ... : type mismatch;
[error] found : slick.profile.SqlStreamingAction[Vector[(Long, String, java.sql.Timestamp, java.sql.Timestamp, java.sql.Timestamp)],(Long, String, java.sql.Timestamp, java.sql.Timestamp, java.sql.Timestamp),slick.dbio.Effect]
[error] required: slick.driver.PostgresDriver.api.DBIO[Seq[com.fevo.slick.Schema.VisibilityRow]]
[error] (which expands to) slick.dbio.DBIOAction[Seq[com.fevo.slick.Schema.VisibilityRow],slick.dbio.NoStream,slick.dbio.Effect.All]
[error] val action2:DBIO[Seq[VisibilityRow]] = tsql"SELECT * FROM visibility"
有没有一种优雅的方法可以让我使用 tsql
提取这些类型,我可以映射到应用上,但我仍然需要指定(并更新)DBIO
的元组类型相应的 s 参数。
如果 case class 构造函数与您的字段匹配,您可以简单地映射结果以获得所需的类型:
val action2:DBIO[Seq[VisibilityRow]] =
tsql"SELECT * FROM visibility".map(_.map(VisibilityRow.apply.tupled))
sql
内插器允许 classes 作为给定 GetResult 实例的结果
val action:DBIO[Seq[VisibilityRow]] = sql"SELECT * FROM visibility".as[VisibilityRow] //compiles fine
Checking the docs,我没有看到使用 tsql
和案例 class.
我决定试一试
val action2:DBIO[Seq[VisibilityRow]] = tsql"SELECT * FROM visibility"
但是我遇到了错误
[error] ... : type mismatch;
[error] found : slick.profile.SqlStreamingAction[Vector[(Long, String, java.sql.Timestamp, java.sql.Timestamp, java.sql.Timestamp)],(Long, String, java.sql.Timestamp, java.sql.Timestamp, java.sql.Timestamp),slick.dbio.Effect]
[error] required: slick.driver.PostgresDriver.api.DBIO[Seq[com.fevo.slick.Schema.VisibilityRow]]
[error] (which expands to) slick.dbio.DBIOAction[Seq[com.fevo.slick.Schema.VisibilityRow],slick.dbio.NoStream,slick.dbio.Effect.All]
[error] val action2:DBIO[Seq[VisibilityRow]] = tsql"SELECT * FROM visibility"
有没有一种优雅的方法可以让我使用 tsql
提取这些类型,我可以映射到应用上,但我仍然需要指定(并更新)DBIO
的元组类型相应的 s 参数。
如果 case class 构造函数与您的字段匹配,您可以简单地映射结果以获得所需的类型:
val action2:DBIO[Seq[VisibilityRow]] =
tsql"SELECT * FROM visibility".map(_.map(VisibilityRow.apply.tupled))