在单个 PFQuery 中从两个 类 中获取数据

Fetching data from two classes in a single PFQuery

想象一下我有一辆汽车 class 的假设情况,其中包含颜色、品牌等属性。一辆汽车可以有零个或多个车主。所有者 class 具有名字、姓氏等属性。创建所有者时,我将其 "carID" 属性设置为汽车的 objectID。因此,您可以通过查询 Owners table 来确定汽车拥有的车主数量,其中 carID 等于某个汽车 ID。

现在我想执行一个获取请求,该请求将 return 汽车的所有属性,加上一个不是汽车 class 列的新属性。我想获得一个数组,其中包含与汽车关联的所有者对象。我想要在单个请求中获取该信息的原因是因为我一次获取多辆车,所以我不想为从 return 编辑的每辆车发出请求以获取车主获取请求。

这是我当前的查询:

PFQuery *query = [PFQuery queryWithClassName:@"Car"];
[query whereKey:"color" equalTo:"red"];
[query findObjectsInBackgroundWithBlock:^(NSArray *cars, NSError *error) {
    //need to know which owners each car has had so I can access attributes of each owner here
    //without making a fetch request for every car in the "cars" array
}];

您将如何修改查询以便在一次提取中获得所需的数据?

最有效的方法是创建一个 CloudCode 函数,然后从 iOS.

调用该函数

让您的汽车表示包含一个名为 owners 的属性,它是指向车主的指针数组 class。有了它,您可以使用 includeKey:...

急切地获取车主作为汽车查询的一部分
PFQuery *query = [PFQuery queryWithClassName:@"Car"];
[query includeKey:@"owners"];
[query findObjectsInBackgroundWithBlock:^(NSArray *cars, NSError *error) {
    for (PFObject *car in cars) {
        for (PFObject *owner in [cars objectForKey:@"owners"]) {
           // here we'll enumerate all of the owners for all of the cars
        }
    }
}];

并且您可以使用 whereKey:equalTo: 获得给定所有者拥有的汽车,这对单数列和数组列的作用相同...

PFObject *owner = // some owner
PFQuery *query = [PFQuery queryWithClassName:@"Car"];
[query whereKey:@"owners" equalTo:owner];
[query includeKey:@"owners"];
// etc.