2015-01-08 109 views
0

我有三個表:用戶,組和users_groups。組和用戶之間存在多對多的關係,因爲一個用戶可以屬於多個組,並且一個組由多個用戶組成。動態創建的滑動查詢

我有一個GET查詢像/組?名稱= X &用戶= Y

從它在Y用戶我是從組搜索與名稱,比如X,但棘手的部分是搜索的組不屬於。

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 _)