在单个 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.
想象一下我有一辆汽车 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.