0

我在 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

例子:

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

  • 至少有一名学生名为 的所有教师Billy
  • 所有没有名为“Emily”的学生的老师。

为此,我目前正在使用以下代码搜索至少有一名名为“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];
4

1 回答 1

-1

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

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

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

于 2015-10-23T19:10:44.493 回答