在同一个PFQuery下收集所有PFRelation

时间:2014-02-11 18:07:00

标签: parse-platform

我正在使用Parse作为我的后端,我正在为我的情况寻找更好的方法。
我将使用Objective-C进行演示,但我没有将其标记为Objective-C,因为它与语言无关。
我的情况如下:我有一个类让我们称它为X.它有一个键让我们称它为Y,它是类型Z的PFRelation(Y<Z>)。 我需要得到一个Z的列表,比如查询Z(Z是我感兴趣的全部)。 而且,如果可能的话,我希望能够像PFQuery一样限制Z的输出 总结一下:我需要PFQuery才能完成PFQuery的所有功能,例如: findObjectsInBackgroundWithBlock:countObjectsInBackgroundWithBlock我将在该块中操作的对象将是Z的NSArray

我当前的解决方案:我想过查询存在Y的X(所以我不会得到X的空对象。只是每个X,加载所有Y并遍历所有的数组ž。

我真的不认为我的解决方案是最好的,希望有人可以指出我的另一种解决方案,以适应我的情况。

1 个答案:

答案 0 :(得分:2)

我想可能就是你要找的东西:

PFQuery *wsQuery = [PFQuery queryWithClassName:@"Workshop"];
[wsQuery whereKey:@"country" equalTo:@"USA"];  // or whatever your criterias
NSArray *workshops = [wsQuery findObjects];

for (PFObject *workshop in workshops) {
    PFQuery *carsQuery = [workshop relationforKey:@"cars"].query;
    [carsQuery setLimit:5];
    // Add whatever constraints you want here
    NSArray *wsCars = [carsQuery findObjects];
    for (PFObject *car in wsCars) {
        NSLog(@"Car make: %@", [car objectForKey:@"make"]);
    }
}

这将首先获得所有研讨会的清单,然后每个研讨会将获得属于该研讨会的所有汽车的清单,并打印每辆汽车的品牌(品牌)。

更新

基于评论的新建议:

PFQuery *wsQuery = [PFQuery queryWithClassName:@"Workshop"];
[wsQuery whereKey:@"country" equalTo:@"USA"];

PFQuery *carQuery = [PFQuery queryWithClassName:@"Car"];
[carQuery whereKey:@"workshop" matchesQuery:wsQuery];
[carQuery setLimit:5];
[carQuery findObjectsInBackgroundWithBlock:^(NSArray *cars, NSError *error) {
    // cars contains only cars with workshops located in USA 
}];