我有(DBIO[Seq[Person]], DBIO[Seq[Address]])格式的元组作为一对一的映射。在关系数据库管理系统中,Person和Address是不同的表。配置文件定义为Profile(person: Person, address: Address)。现在我想将前者转换为DBIO[Seq[Profile]]。下面是我如何获得(DBIO[Seq[Person]], DBIO[Seq[Address]])的代码片段
for {
person <- personQuery if person.personId === personId
address <- addressQuery if address.addressId === profile.addressId
} yield (person.result, address.result)我需要帮助来完成这个到DBIO[Seq[Profile]的转换。
发布于 2020-05-27 16:05:12
假设您不能使用join,并且您需要使用两个操作(两个DBIO),那么您可以做的是将这两个操作合并为一个操作:
// Combine two actions into a single action
val pairs: DBIO[ ( Seq[Person], Seq[Address] ) ] =
(person.result).zip(address.result)(zip只是您可以用来操作DBIO的many combinators之一)。
在那里,您可以使用DBIO.map将该对转换为您想要的数据结构。
例如:
// Use Slick's DBIO.map to map the DBIO value into a sequence of profiles:
val profiles: DBIO[Seq[Profile]] = pairs.map { case (ppl, places) =>
// We now use a regular Scala `zip` on two sequences:
ppl.zip(places).map { case (person, place) => Profile(person, place) }
}发布于 2020-05-27 15:51:33
无论DBIO是什么,我都不熟悉。假设它是某个类型T的case类:
val (DBIO(people), DBIO(addresses)) = for {
person <- personQuery if person.personId === personId
address <- addressQuery if address.addressId === profile.addressId
} yield (person.result, address.result)
val profiles = DBIO(people.zip(addresses).map{ case (person, address) => Profile(person, address)})https://stackoverflow.com/questions/62035092
复制相似问题