如何在 Scala 中解包 Slick 的 Rep 对象?

How to unwrap Rep object of Slick in Scala?

我是第一次使用 Slick,作为 FRM 工具与 ScalaMySQL

然而,在编写具有多个连接的查询时,我意识到我无法进一步访问一些中间对象以基于它进行过滤。

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

做的事