当我使用Scala Slick进行查询时,我需要映射结果以访问它们并将它们展平为()。这里的问题是连接产生了很多_._ 1._2._3._1等。有更好的方法吗?
Events.events.filter( (i: Events) => {
((i.isGhost === true) && (i.ghostOfEventId === groupId)) ||
((i.isGhost === false) && (i.id === groupId))
})
.join(ProfileEvents.profileEvents).on(_.id === _.eventId)
.join(Profiles.profiles).on(_._2.profileId === _.id)
.join(ProfileEx1s.profileEx1s).on(_._2.id === _.profileId)
.run.toList.map( (n) => {
(n._1._1._1, // Event
n._1._1._2, // ProfileEvent
n._1._2, // Profile
n._2) // ProfileEx1s
})
答案 0 :(得分:1)
你可以通过理解来做到这一点:
val query = for {
e <- Events.events if (e.isGhost && e.ghostOfEventId === groupId) || (!e.isGhost && e.id === groupId)
pe <- ProfileEvents.profileEvents if e.id === pe.eventId
p <- Profiles.profiles if pe.profileId === p.id
px <- ProfileEx1s.profileEx1s if pe.id === px.profileId
} yield (e, pe, p, px)
query.run.toList // <- this will be of type List[(Event, ProfileEvent, Profile, ProfileEx1s)]
我可能混淆了加入条件,但你应该明白这个想法。