3

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

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

我正在尝试弄清楚如何编写一个查询,该查询允许我获取所有拥有汽车的用户少于 2000 年并且具有某种颜色(比如说红色)。

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

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

我开始使用 PFQuery:

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

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

有什么建议吗?

4

2 回答 2

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"];
于 2014-07-02T03:00:15.837 回答
1

你的桌子是什么样子的?如果您在 Car 表中将 User 作为列,则只需在 car 表中查询小于 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"];
        }
    }
}];
于 2014-07-02T03:06:44.767 回答