如何使用关系执行解析查询,其中关系包含一个或不包含对象匹配条件



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

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

例:

假设我有两类PFObjects: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];

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

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

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

最新更新