如何使用关系包含一个或没有匹配条件的对象来执行Parse查询?

时间:2015-06-12 21:44:38

标签: ios objective-c parse-platform pfquery pfrelation

我在Objective-C中使用Parse iOS SDK并尝试根据对象的关系是否包含至少一个与特定查询匹配的对象或者没有匹配同一查询的关系对象来查询对象。我正在尝试使用-[PFQuery whereKey:matchesQuery:]-[PFQuery whereKey:doesNotMatchQuery:]来执行此操作,但我收到错误"bad type for $inQuery",并认为这与我正在尝试执行的操作有关。有没有办法在单个PFQuery中查询这些对象?如果没有,实现这一目标的最佳方法是什么?

我在使用-[PFQuery whereKey:containedIn:]的旧Parse论坛中找到了以下现有答案,但它似乎使用了一个PFObject数组而不是PFRelation作为其键,并且还需要一个现有的对象数组来匹配(因此似乎不适合我):https://www.parse.com/questions/query-where-relation-contains-any-object-from-array

示例:

假设我有两类PFObject:TeacherStudent。教师对学生有多对多的PFRelation students,而每个学生都有属性firstNamelastName,每个属性都有一个字符串。我希望能够根据学生的属性查询教师,例如:

  • 所有至少有一名学生名为Billy
  • 的教师
  • 所有没有学生的老师都叫“艾米丽”。

为此,我目前正在使用以下代码搜索至少有一名名为“Billy”的学生:

PFQuery *teacherQuery = [[PFQuery alloc] initWithClassName:@"Teacher"];
PFQuery *studentsQuery = [[PFQuery alloc] initWithClassName:@"Student"];
[studentsQuery whereKey:@"firstName" equalTo:@"Billy"];
[teacherQuery whereKey:@"students" matchesQuery:studentsQuery];

和以下代码搜索没有名为“Emily”的学生的教师:

PFQuery *teacherQuery = [[PFQuery alloc] initWithClassName:@"Teacher"];
PFQuery *studentsQuery = [[PFQuery alloc] initWithClassName:@"Student"];
[studentsQuery whereKey:@"firstName" notEqualTo:@"Emily"];
[teacherQuery whereKey:@"students" matchesQuery:studentsQuery];

1 个答案:

答案 0 :(得分:0)

您实际上可以查询PFRelation本身。我想它会是这样的:

PFObject *teacher = ...// teacher object you got from query
PFRelation *students = [teacher relationForKey:@"students"];
[students whereKey:@"first_name" equalTo:@"Billy"];

我现在不容易测试自己,但也许你可以将它作为子查询使用?我很想知道你是否解决了这个问题。