我有两个表,一个有列表,另一个有汽车。
List表与汽车有关系。因此,列表carsInList中的一个列表可以包含许多汽车。对于列carsInList,我使用了类型数组。
从一个列表中获取所有汽车的最佳查询是什么?我应该使用一个列表中的唯一键和列表中的汽车吗?我认为必须有一个更好的方法,因为在parse.com后端我可以看到许多汽车都存储在carsInList列中。
感谢您的帮助!!
答案 0 :(得分:2)
我假设每个用户都有自己的汽车列表?以下方法的优势在于它只会生成1个API请求。您不一定需要使用PFRelation。
让我们说我们有一个名为" List"的课程。您可以创建一个名为" userId"的列。使用用户的objectId作为查询列表对象的值。
PFObject* list = [PFObject objectWithClassName@"List"];
PFUser* currentUser = [PFUser currentUser];
[list setObject:currentUser.objectId forKey:@"userId"];
你可以添加一个" Car" object作为指向" List"的指针对象:
PFObject* car = [firstQuery getFirstObject]; // assuming the query has been created
[list addObject:car forKey:@"cars"];
[list save];
或者你可以添加多个" Car"对象作为" List"的指针对象:
NSArray* cars = [secondQuery findObjects]; // assuming the query has been created
[list addObjectsFromArray:car forKey:@"cars"];
[list save];
现在按如下方式查询对象。请务必使用 includeKey:方法。
PFQuery* query = [PFQuery queryWithClassName@"List"];
[query whereKey:@"userId" isEqualTo:currentUser.objectId];
[query includeKey:@"cars"]; // Make sure to include this when pulling an array of pointers
PFObject* list = [query getFirstObject];
NSArray* cars = [list objectForKey:@"cars"];
请注意,你可以拉出一个" Car"来自" List"的对象通过 includeKey:方法对象。应该注意的是, addObject:ForKey:将扩充现有数组。您可以通过 setObject:ForKey:方法向任何对象添加一个新的指针数组。
答案 1 :(得分:1)
可能有更好的方法可以做到这一点,但是这样做会有效,并且应该足以满足您的需求。
PFQuery *query = [PFQuery queryWithClassName:@"List"];
// If you want to get a certain list, refine the query :
[query whereKey:@"listId" equalTo:someListIdYouHaveLocally]; // or something.
[query findObjectsInBackgroundWithBlock:^(NSArray *lists, NSError *error) {
// If your listId is unique, there should be only 1 list and this will
// only iterate 1 time.
for (PFObject *list in lists)
{
PFRelation *carRelation = [list relationForKey:@"Car"];
PFQuery *query2 = [carRelation query];
[query2 findObjectsInBackgroundWithBlock:^(NSArray *cars, NSError *error) {
for (PFObject *car in cars)
{
// Do whatever you want with that car.
}
}];
}
}];