knshn 的回答不好,因为它假设必须在任何时候使用 PFRelation,因为性能问题,“MANY”方有超过 100 个关系。
这不是真的,因为您可以使用“指针关系”创建一对多关系,而 Parse 可以处理 100 多个关系没有问题。或者当一侧的关系超过100个而另一侧的关系少于100个时,它甚至可以有效地处理“数组关系”的多对多关系。所以正确的答案应该提到拥有超过100个关系成为问题仅在使用“数组关系”时,即。制作一个包含 100 多个项目的数组并将其设置为一个对象。
所以回到最初的问题,我建议你在 TennisGame 实例中拥有一组 PFUser 玩家,因为每个游戏一次只有 2 或 4 名玩家时间,或者至少肯定少于 100。
因此,如果您想从特定的TennisGame 实例中获取PFUser 玩家,则必须执行如下查询:
PFQuery *query = [PFQuery queryWithClassName:@"TennisGame"];
[query includeKey:@"players"];
[query getObjectInBackgroundWithId:tennisGameId block:^(PFObject *tennisGame, NSError *error) {
if (tennisGame) {
tennisGame[@"players"];
}
}];
接下来,如果要获取当前用户玩过的所有游戏,按日期排序,可以执行如下查询:
PFQuery *query = [PFQuery queryWithClassName:@"TennisGame"];
[query addDescendingOrder:@"createdAt"];
[query whereKey:@"players" equalTo:[PFUser currentUser]];
[query findObjectsInBackgroundWithBlock:^(NSArray *tennisGames, NSError *error) {
// do whatever you need with the results
}];
最后,您可能会问:“等等!如果玩家玩了超过 100 场比赛,这不会是性能问题吗?”答案是否定的,因为这只是数组的问题,而不是查询的问题。如果将游戏作为数组保存在PFUser 实例中,而不是将玩家数组保存在TennisGame 实例中,这将是一个问题。此外,PFRelation 也是某种查询,因此推荐使用它来检索大量对象。
奖励:何时使用PFRelation?
当您需要 A-LOT-to-A-LOT 关系时,这是理想的选择,因此在社交网络应用程序上使用 PFRelation 表示“关注者”之类的东西是有意义的,因为每个帐户可以有超过 100 个“关注者”,每个帐户可以是 100 多个其他帐户的“关注者”。