如何从 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
)
我想从父 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
)