解析iOS如何通过相关PFObject中找到的属性查询对象?

时间:2014-07-02 02:44:05

标签: ios parse-platform pfquery

我正在编写一个iOS应用程序,我正在使用Parse在服务器端存储数据。

我有用户,每个用户都可以拥有一辆车。

我正在试图弄清楚如何编写一个查询,让我可以让所有拥有年份小于2000且具有特定颜色的汽车的用户(假设为红色)。

每辆车都与用户有关系,每个用户也与他们的汽车有关系。

用户< - >汽车(一对一)

我开始使用PFQuery:

PFQuery * userQuery = [PFQuery queryWithClassName:@"User"];

我不确定如何处理查询中的关系。所以,我几乎不确定如何完成这件事。

有什么建议吗?

2 个答案:

答案 0 :(得分:6)

首先,User类是一种特殊情况,在查询中使用它时需要执行此操作:

PFQuery *query = [PFUser query];

接下来,构造所需查询的方式取决于指针的位置。如果用户具有car属性,该属性是指向Car的指针,则查询将如下所示:

PFQuery *userQuery = [PFUser query];

PFQuery *carQuery = [PFQuery queryWithClassName:@"Car"];
[carQuery whereKey:@"year" lessThan:@(2000)];
[carQuery whereKey:@"color" equalTo:@"red"];

[userQuery whereKey:@"car" matchesQuery:carQuery];
[userQuery includeKey:@"car"]

[userQuery findObjectsInBackgroundWithBlock:^(NSArray *users, NSError *error) {
    for (PFObject *user in users) {
        PFObject *car = user[@"car"];
        // read user/car properties as needed
    }
}];

如果Car类具有user属性,您只需执行常规查询并添加以下行以便访问完整的User对象:

[carQuery includeKey:@"user"];

答案 1 :(得分:1)

你的桌子是什么样的?如果您在Car表中将User作为列,则只需查询汽车表中年份小于2000的汽车,然后您只需访问该查询的User属性即可。它看起来像这样:

PFQuery *carQuery = [PFQuery queryWithClassName:@"Car"];
[carQuery whereKey:@"year" lessThan:@(2000)];
[carQuery includeKey:@"user"];
[carQuery findObjectsInBackgroundWithBlock:^(NSArray *cars, NSError *error) {
    if (!error) {
        for (Car *car in cars) {
            User *user = car@["user"];
        }
    }
}];