如何在 Scala 中解包 Slick 的 Rep 对象?
How to unwrap Rep object of Slick in Scala?
我是第一次使用 Slick,作为 FRM 工具与 Scala 和 MySQL。
然而,在编写具有多个连接的查询时,我意识到我无法进一步访问一些中间对象以基于它进行过滤。
即rep1 这里是 Rep[Option[Manufacturer]]]
类型
如何将此对象解包到 Manufacturer 以便我可以访问它的列?
val query = product
.joinLeft(manufacturer).on { case (prod, man) => prod.manufacturerid == man.manufacturerid }
.joinLeft(category).on { case ((prod, rep1), cat) => prod.categoryid == cat.categoryid }
// .filter() after this using rep1
你好 Pratik Shah,欢迎来到 Whosebug。
我发现将 Rep
中的任何内容视为数据库中的 运行(作为 SQL 的一部分)很有用。考虑到这一点,您不会解包 Rep
:您在 Slick 查询中使用它(以及 运行 查询的结果,在某种意义上将其解包为普通值)。
因此,如果您可以在 filter
中访问 rep1
,则可以使用 Slick 的运算符(例如,===
而不是 ==
,注意)来使用 Option[Manufacturer]
值作为查询的一部分。如果没有 运行 代码,我不能肯定地说,但它可能是这样的:
filter { case ((prod, rep1), cat) => rep1.map(_.manufacturerid) === 42 }
...或者任何您想用 rep1
做的事
我是第一次使用 Slick,作为 FRM 工具与 Scala 和 MySQL。
然而,在编写具有多个连接的查询时,我意识到我无法进一步访问一些中间对象以基于它进行过滤。
即rep1 这里是 Rep[Option[Manufacturer]]]
类型如何将此对象解包到 Manufacturer 以便我可以访问它的列?
val query = product
.joinLeft(manufacturer).on { case (prod, man) => prod.manufacturerid == man.manufacturerid }
.joinLeft(category).on { case ((prod, rep1), cat) => prod.categoryid == cat.categoryid }
// .filter() after this using rep1
你好 Pratik Shah,欢迎来到 Whosebug。
我发现将 Rep
中的任何内容视为数据库中的 运行(作为 SQL 的一部分)很有用。考虑到这一点,您不会解包 Rep
:您在 Slick 查询中使用它(以及 运行 查询的结果,在某种意义上将其解包为普通值)。
因此,如果您可以在 filter
中访问 rep1
,则可以使用 Slick 的运算符(例如,===
而不是 ==
,注意)来使用 Option[Manufacturer]
值作为查询的一部分。如果没有 运行 代码,我不能肯定地说,但它可能是这样的:
filter { case ((prod, rep1), cat) => rep1.map(_.manufacturerid) === 42 }
...或者任何您想用 rep1