【发布时间】:2018-10-11 11:00:48
【问题描述】:
我有以下精巧的实体:
class Person(personId, houseId, carId)
class House(houseId)
class Car(carId)
我想选择一个人及其可选的房子和汽车,我的查询是:
val query = personTable
.filter(_.personId === personId)
.joinLeft(houseTable)
.on(_.houseId === _.houseId)
.joinLeft(carTable)
.on(_._1.carId === _.carId)
.result
.headOption
但是,查询的返回类型看起来有点滑稽,我希望它是一个元组(人、房子、汽车):
Option[(Person, Option[House], Option[Car])]
但它实际上是一个元组(tuple(person, house), car):
Option[((Person, Option[House]), Option[Car])]
返回的数据似乎是正确的,只是结构不寻常,也许我没有正确执行上面的多重连接?
【问题讨论】:
-
也许如果您尝试在理解范围内重写它(查看applicative join 中的示例),您将能够更改查询的格式以返回单个元组。由于 for-comprehensions 只是很好的语法糖,
map可能也可以完成这项工作