【发布时间】:2015-01-08 10:58:48
【问题描述】:
我有三个表:users、groups 和 users_groups。组和用户之间存在多对多关系,因为一个用户可以属于多个组,一个组由多个用户组成。
我有一个 GET 查询,例如 /group?name=X&user=Y
我正在搜索名称为 X 的组,但棘手的部分是搜索 Y 用户不属于的组。
def findUserGroups(id: Long) = {
users_groups.filter(ug => ug.userID === id)
}
从中我得到用户所属的所有组,然后我这样做
var queries : List[Query[GroupsTable, GroupsTable#TableElementType, Seq]]= List[Query[GroupsTable, GroupsTable#TableElementType, Seq]]()
userGroups map { userGroup =>
val query : Query[GroupsTable, GroupsTable#TableElementType, Seq] = groups.filter(_.id =!= userGroup.group.get)
queries = query :: queries
}
如果我 println userGroup 它会给我正确的组。
最后我一直在尝试联合
def findGroupByNameSynthFunction(name: String, queries: List[Query[GroupsTable, GroupsTable#TableElementType, Seq]]) = {
val query1 = groups.filter(g => g.name like ("%" + name + "%"))
val unionQuery: Query[GroupsTable, GroupsTable#TableElementType, Seq] = query1
queries map { query =>
unionQuery ++ query
}
unionQuery
}
我执行它
val found = GroupsTable.findGroupByNameSynthFunction(name, queries).run
但我还是得到了所有组。
谁能解释一下我做错了什么!? :)
【问题讨论】: