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

问题描述

我第一次使用Slick作为带有 Scala MysqL 的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

解决方法

你好Pratik Shah,欢迎来到Stackoverflow。

我发现将Rep内部的任何内容视为在数据库中运行(作为SQL的一部分)很有用。考虑到这一点,您无需解开Rep:您可以在Slick查询中使用它(以及在某种意义上将查询以某种类型的未包装的结果运行到纯值)。

因此,如果您可以在rep1内访问filter,则可以使用Slick的运算符(例如,注意===而不是==)来使用{{1} }值作为查询的一部分。我不能肯定地说不运行代码,但可能会像这样:

Option[Manufacturer]

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

做的任何事情