如何在Slick中对左连接产生的可选表进行过滤

5
我需要在Scala的Slick中对左连接产生的可选表的属性应用过滤器。我无法在网上找到任何关于此的文档或类似问题的答案。
考虑以下查询:
val query = FirstTable joinLeft SecondTable on (_.foreignId === _.id)

我希望能够按照SecondTable的属性进行筛选:
query.filter {
  case (firstTable, secondTableOpt) => secondTableOpt.attribute === "value"
}

显然,这段代码无法编译,因为secondTableOpt是一个Rep [Option [SecondTable]]Rep对象上似乎没有.get方法。

应该有一种方法可以在slick中编写此代码,请问有谁知道如何实现吗?

谢谢


为什么不在连接之前过滤SecondTable - Carlos Vilchez
嗯,因为我根本没有考虑过在之前进行过滤!这可能就是原因了,非常感谢你! - Alexandre Curreli
我会将其作为答案,以更好地解释它。 - Carlos Vilchez
1个回答

9

由于您需要在结果中过滤SecondTable的结果,因此最好在左连接之前进行过滤。所以代码应该像这样:

val filteredSecondTable = SecondTable.filter(_.attribute === "value")

val query = FirstTable joinLeft filteredSecondTable on (_.foreignId === _.id)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接