У меня есть три таблицы: пользователи, группы и users_groups. Между группами и пользователями существует много разных отношений, поскольку один пользователь может принадлежать нескольким группам, а группа состоит из нескольких пользователей.Динамически созданные slick-запросы
У меня есть запрос GET, как/группа? Имя = X & пользователь = 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
Но я получаю все группы в любом случае.
Может кто-то объяснил мне, что я делаю очень неправильно !? :)