Parse.com REST API - 反向反向指针查询查找

时间:2014-08-08 03:46:35

标签: parse-platform

我有以下两个类

Game 
  objectId
  player1
  player2

Round
  objectId
  game (pointer to Game.objectId)

每个游戏都可以有很多回合,这就是为什么我使用了一个poitner(所有的解析文档似乎都指出了一对多的指针或多对多的指示)

目前我在Round类上成功运行查询,并且我正在使用include选项在循环结果中提取游戏数据。这一切都很棒,而且效果很好。

然而,我现在已经意识到游戏可能存在而没有任何轮次(最初至少)。因此,我试图从Game类的角度重新查询我的查询,但无论我尝试什么,我都无法“包含”与游戏相关的轮次。

我想也许我应该在Game类中有一个'rounds'指针列指向'Round'中的gameObjectId列,但它不会让我添加它和错误。我认为这是因为指针需要指向您指向的类的objectId - 这对我来说不会像Round objectId那样。

有人知道这是否可行?也许我需要一个考虑,但这不是一个很多很多的关系。我已经阅读了关于人际关系等的解析文档,但我仍然不清楚。

我来自一个sql背景,这就是为什么我似乎无法掌握这个问题 - 它应该是直截了当的,但我明显错过了一些东西。

希望有人可以就如何实现这一目标提出建议。如果需要,我很乐意调整我的架构。

提前致谢

1 个答案:

答案 0 :(得分:0)

使用指针获取关系两侧的所有对象需要两个API请求:

PFQuery *gameQuery = [PFQuery queryWithClassName:@"Game"];
[gameQuery getObjectInBackgroundWithId:@"some_id" block:^(PFObject *game, NSError *error) {
    PFQuery *roundQuery = [PFQuery queryWithClassName:@"Round"];
    [roundQuery whereKey:@"game" equalTo:game];
    [roundQuery findObjectsInBackgroundWithBlock:^(NSArray *rounds, NSError *error) {

    }];
}];

而不是指针,你可能想要使用一个数组(假设一个游戏不会超过100轮,否则它不会有效):

Game
objectId
player1
player2
rounds (round array)

Round
objectId

然后你可以再次使用include(就像你用指针做的那样)并获得游戏:

PFQuery *gameQuery = [PFQuery queryWithClassName:@"Game"];
[gameQuery includeKey:@"rounds"];
[gameQuery getObjectInBackgroundWithId:@"some_id" block:^(PFObject *game, NSError *error) {

}];