如何从 2 个表中获取 Seq(Table1Type, Seq[Table2Type])

How to get Seq(Table1Type, Seq[Table2Type]) from 2 tables

我想从父 table 和第二个 table 中的所有对应行中获取值。是否可以在 Slick

比如这段代码,

db.run(val crossJoin = for {
  (c, s) <- coffees join suppliers
} yield (c, s))

returnFuture[Seq[(Coffee, Supplier)]],但我怎么猫得到Future[Seq[(Supplier, Seq[Coffee])]]

要获得 Future[Seq[(Supplier, Seq[Coffee])]],您需要按供应商分组:

crossJoin.groupBy(_._2)

但是您需要在 groupBy 之后加上一个 map 来说明如何聚合 groupBy 中未使用的内容;你需要告诉如何将咖啡聚合成 Seq:

crossJoin.groupBy(_._2).map { case (supplier, coffees) => (supplier, aggregate(coffees) }

在 Slick 中没有 聚合 方法来实现这一点,一些 RDBMS 也没有。

也许你必须坚持使用通常的 scala 集合 api,在你获得 Future 之后:

db.run(suppliers.join(coffees).result).map(_
  .groupBy(_._1)
  .view.mapValues(_.map(_._2))
  .toSeq
)