【发布时间】:2016-11-22 09:33:25
【问题描述】:
我有一个用户可以再拥有一个 LoginInfos。我希望通过 id 找到这个用户,然后将每个关联的 LoginInfos 打包到 User 对象中。
我的期望是,我将获得与每个具有相同用户的 LoginInfo 的数量相等的行数。因此,我首先将用户映射到对象,然后再映射到每个 LoginInfos。有没有更好的办法?
这是我所拥有的:
def find(userID: UUID) = {
val query = for {
dbUser <- slickUsers.filter(_.id === userID.toString)
dbUserLoginInfo <- slickUserLoginInfos.filter(_.userID === dbUser.id)
dbLoginInfo <- slickLoginInfos.filter(_.id === dbUserLoginInfo.loginInfoId)
} yield (dbUser, dbLoginInfo)
db.run(query.result).map { results =>
var loginList = List[LoginInfo]()
results.foreach {
case (user, loginInfo) =>
loginList = LoginInfo(loginInfo.providerID, loginInfo.providerKey) :: loginList
}
results.headOption.map {
case (user, loginInfo) =>
User(
UUID.fromString(user.userID),
loginList,
user.firstName,
user.lastName,
user.fullName,
user.email,
user.avatarURL)
}
}
【问题讨论】:
-
为什么不过滤
slickUsers,然后加入slickUserLoginInfos和slickLoginInfos?我不确定所有这些过滤器会返回什么查询.. -
我做了一些更改以简化问题。
标签: scala playframework-2.0 slick