簡體   English   中英

iOS-使用Parse.com框架的關系查詢

[英]iOS - Relational Queries using Parse.com Framework

我正在使用Parse.com作為我的應用程序的后端。 在后端,我有以下課程:

User (objectId, name, username, password, etc)
Team (objectId, teamName, etc)
User_To_Team (objectId, teamId, userId)

“ teamId”和“ userId”列是指向User和Team類的指針。

我正在嘗試以一種可以向我展示與用戶關聯的所有團隊的方式查詢Parse。 我嘗試了以下方法,但這不起作用。

 var innerQuery = PFQuery(className: "User_To_Team")
 innerQuery.whereKey("userId", equalTo: PFUser.currentUser())
 var query = PFQuery(className:"Team")
 query.whereKey("objectId", matchesQuery:innerQuery)
 query.findObjectsInBackgroundWithBlock {
     ...
 }

我有文檔,但是他們沒有提供很多示例。

我收到以下錯誤:

[錯誤]:$ inQuery的錯誤類型(代碼:102,版本:1.6.1)錯誤:錯誤域=分析代碼= 102“無法完成操作。(分析錯誤102。)” UserInfo = 0x1702779c0 {error = $ inQuery的錯誤類型,代碼= 102},[錯誤:$ inQuery的錯誤類型,代碼:102]

- -編輯 - -

我現在正在嘗試以下操作,該操作不再產生錯誤,但也不產生任何結果。 我還將“團隊​​”更改為“小隊”,因為在該應用程序中將團隊稱為小隊。 對我來說更干凈。

var innerQuery = PFQuery(className: "User_To_Squad")
innerQuery.whereKey("userId", equalTo: PFUser.currentUser())
var query = PFQuery(className:"Squad")
query.whereKey("objectId", matchesKey: "squadId", inQuery: innerQuery)

我最終僅通過使用Parse中的“ includeKey”方法就解決了這個問題。

我的查詢現在看起來像這樣:

var query = PFQuery(className: "User_To_Squad")
query.includeKey("squadId")
query.whereKey("userId", equalTo: PFUser.currentUser())
query.findObjectsInBackgroundWithBlock {
    ...
}

“ includeKey”方法將關系類作為對象返回。 由於User_To_Squad類中的user和squad列都是指針,因此這工作得非常好,並且可以在一個查詢中完成。

解析查詢文檔對此進行了詳細介紹。

對於其他有此問題並且不想更改其數據模型或查詢的人,這是我發現的。

問題在於該類不是在Parse的服務器上創建的。 在尚不存在的類上執行嵌套查詢會導致類型錯誤。 修復此問題所需要做的就是創建類以及要查詢的列。

對於我的用例,尚未在Parse服務器上創建ParseFollower類,這導致我為inQuery錯誤獲取了錯誤的類型。

let fromQuery = ParseUserInfo.query()
fromQuery?.includeKey("username")
fromQuery?.whereKey("username", equalTo:myUsername)

let fromFollowerQuery = ParseFollower.query()
fromFollowerQuery?.includeKey("to")
fromFollowerQuery?.includeKey("from")
fromFollowerQuery?.whereKey("from", matchesQuery: fromQuery!)

我根本沒有更改此代碼,只是在服務器上創建了該類,問題就消失了。 希望這對其他人有幫助。

或者,您可以通過以下博客文章來更改數據模型: http : //blog.parse.com/2012/03/28/parse-supports-many-to-many-relations/

解析可以處理多對多關系(例如球員和球隊)。 基本上,您只需PFObject代表您的用戶的PFObject數組保存到團隊PFObject

var team = PFObject(className: "Team")
team.setObject(p, forKey: "players") // here, p is an array containing PFObject corresponding to the User class
team.setObject("Ferrari", forKey: "teamName")
// ...
team.saveInBackground()

之后,您應該能夠使用一條語句進行查詢:

var query = PFQuery(className: "Team")
query.whereKey("players", equalTo: PFUser.currentUser())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM