Slick 3 简单加入表格
Slick 3 simple join on tables
我很难尝试对两个表执行连接。
这是我在 Scala 中的模型:
case class Event(idEvent: Int, blablabla)
case class User(idUser: Int, blablabla)
case class UserParticipatesToEvent(idUser: Int, idEvent: Int)
基本上,一个用户可以参加很多不同的活动。
我需要获取所有参加活动的用户。早些时候,在 slick 2.0 中,我的 User DAO 中的一个简单的 for-comprehension 正在做这项工作:
def findUsersByEvent(idEvent: Int): List[User] = {
(for {
userIds <- EventDAO.findIDUsersByEvent(idEvent)
res <- this.findUserById(userIds)
} yield(res))
}
在 slick 3.0 中,我完全不知道如何实现这种简单的连接。如今,在 Slick 3.0 中,它应该 return 一个 Future[List[User]].
在此先感谢您的帮助。
Here 您已经很好地解释了如何进行简单连接,以及如何连接多对多表(就像您的情况一样)。
您基本上有 2 个选项,内部连接(可以使用 if 语句进行理解)或外部连接(左连接或右连接)。
内部联接:
val usersWithEvents = for {
((user, _), event) <- UserTable.join(UserEventTable).on(_.userId === _.userId).
join(EventTable).on(_._2.eventId === _.eventId)
} yield(user, event)
现在您有 Seq[(User, Event)]
,因此您按 User
分组,您将获得用户的事件。
注意:我没有测试这个...
另请参阅本教程的 repo。希望这可以帮助! :)
我很难尝试对两个表执行连接。
这是我在 Scala 中的模型:
case class Event(idEvent: Int, blablabla)
case class User(idUser: Int, blablabla)
case class UserParticipatesToEvent(idUser: Int, idEvent: Int)
基本上,一个用户可以参加很多不同的活动。
我需要获取所有参加活动的用户。早些时候,在 slick 2.0 中,我的 User DAO 中的一个简单的 for-comprehension 正在做这项工作:
def findUsersByEvent(idEvent: Int): List[User] = {
(for {
userIds <- EventDAO.findIDUsersByEvent(idEvent)
res <- this.findUserById(userIds)
} yield(res))
}
在 slick 3.0 中,我完全不知道如何实现这种简单的连接。如今,在 Slick 3.0 中,它应该 return 一个 Future[List[User]].
在此先感谢您的帮助。
Here 您已经很好地解释了如何进行简单连接,以及如何连接多对多表(就像您的情况一样)。 您基本上有 2 个选项,内部连接(可以使用 if 语句进行理解)或外部连接(左连接或右连接)。
内部联接:
val usersWithEvents = for {
((user, _), event) <- UserTable.join(UserEventTable).on(_.userId === _.userId).
join(EventTable).on(_._2.eventId === _.eventId)
} yield(user, event)
现在您有 Seq[(User, Event)]
,因此您按 User
分组,您将获得用户的事件。
注意:我没有测试这个...
另请参阅本教程的 repo。希望这可以帮助! :)