解析 - 从关系中获取对象

时间:2015-04-28 04:38:21

标签: ios objective-c iphone xcode parse-platform

我有两个表,一个有列表,另一个有汽车。

List表与汽车有关系。因此,列表carsInList中的一个列表可以包含许多汽车。对于列carsInList,我使用了类型数组。

从一个列表中获取所有汽车的最佳查询是什么?我应该使用一个列表中的唯一键和列表中的汽车吗?我认为必须有一个更好的方法,因为在parse.com后端我可以看到许多汽车都存储在carsInList列中。

感谢您的帮助!!

2 个答案:

答案 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.
            }
        }];
    }
}];