繁体   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