2015-01-08 3 views
0

У меня есть три таблицы: пользователи, группы и 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 

Но я получаю все группы в любом случае.

Может кто-то объяснил мне, что я делаю очень неправильно !? :)

ответ

0

Я не знаю, где именно вы имели неправильное ожидание, но это, вероятно, вращается вокруг выражения

queries map { query => 
    unionQuery ++ query 
} 

Это не имеет никакого побочного эффекта. Если вы ничего не делаете с полученным значением (а вы нет), это ничего не делает. Вероятно, вы хотите что-то вроде

def findGroupByNameSynthFunction(
    name: String, 
    queries: List[Query[GroupsTable, GroupsTable#TableElementType, Seq]] 
) = queries.map(_.filter(_.name like ("%" + name + "%"))) 
      .reduce(_ union _) 
Смежные вопросы