首页 > 解决方案 > 如何在 Scala 中解开 Slick 的 Rep 对象?

问题描述

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

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

即这里的rep1,它的类型是Rep[Option[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

标签: mysqlscalaslick

解决方案


您好 Pratik Shah,欢迎来到 Stackoverflow。

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

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

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

...或任何你想做的事rep1


推荐阅读