假设我有organization
个,每个组织有不同的group
个,并且user
个订阅了组。
case class OrganizationEntity(id: Option[Int],name: String)
case class GroupEntity(id: Option[Int],organizationId: Int,name: String)
case class GroupUserEntity(groupId: Int,userId: Int)
我需要获取一个组织的所有组,并具有organizationName和订阅该组的用户数量。
在SQL中,可以通过以下查询轻松完成此操作:
SELECT g.*,o.organizationname,COUNT(DISTINCT gu.userid) FROM `group` g
LEFT JOIN organization o ON g.orgid = o.organizationid
LEFT JOIN group_user gu ON g.groupid = gu.groupid
WHERE g.orgid = 1234
GROUP BY g.groupid;
但是我正在努力地以光滑的方式复制它,
我已经开始写这篇文章了,但是现在我被困住了:
def findByOrganizationId(organizationId: Int) = {
(for {
g <- groups if g.organizationId === organizationId
o <- organizations if o.id === organizationId
gu <- groupUsers if g.id === gu.groupid
} yield (g,o.name,gu)).groupBy(_._3.groupid).map { case (_,values) => (values.map { case (g,orgname,users) => (g,users.) } }.result
}