【问题标题】:How to unwrap Rep object of Slick in Scala?如何在 Scala 中解开 Slick 的 Rep 对象?
【发布时间】:2021-02-17 01:27:53
【问题描述】:

我第一次使用Slick,作为带有ScalaMySQL的FRM工具。

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

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

【问题讨论】:

标签: mysql scala slick


【解决方案1】:

您好 Pratik Shah,欢迎来到 Stackoverflow。

我发现将 Rep 中的任何内容都视为在数据库中运行(作为 SQL 的一部分)很有用。考虑到这一点,您不会打开 Rep:您在 Slick 查询中使用它(以及运行查询的结果,从某种意义上说是展开为普通值)。

因此,如果您可以在 filter 中访问 rep1,则可以使用 Slick 的运算符(例如,=== 而不是 ==,注意)将 Option[Manufacturer] 值用作查询的一部分。如果不运行代码,我不能肯定地说,但它可能是这样的:

filter { case ((prod, rep1), cat) => rep1.map(_.manufacturerid) === 42 }

...或者你想用rep1做任何事情

【讨论】:

    猜你喜欢
    • 2015-12-28
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2019-03-07
    • 1970-01-01
    相关资源
    最近更新 更多