我正在使用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并遍历所有的数组ž。
我真的不认为我的解决方案是最好的,希望有人可以指出我的另一种解决方案,以适应我的情况。
答案 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
}];