我有两个实体,即学生和课程,其中每个实体与另一个实体有多对多关系(即,学生有0个或更多课程,课程有0个或更多学生)。
我需要获得所有注册课程的学生。我还需要获得给定学生注册的所有课程(通过firstName)。
伪谓词将是:所有具有名称等于courseName 的课程的学生。
所以我的问题包括两部分:
供您参考,以下是我的实体:
答案 0 :(得分:1)
1)使用此功能过滤使用students
的特定课程中的courseName
数组:
[NSPredicate predicateWithFormat:@"ANY courses.name like %@", courseName]
或者,如果您已经拥有course
个对象(并且name
在调用course
个对象中是唯一的),您可以通过访问其{{1}来简单地让所有学生属性,即
students
2)使用此功能过滤具有某个course.students // returns an NSSet/NSOrderedSet based on your model setup
学生的courses
数组:
firstName
注意:[NSPredicate predicateWithFormat:@"ANY students.firstName like %@", firstName]
和NSSet
有一个方法NSOrderedSet
来获取对象数组。
另请参阅使用带关键路径的谓词下的NSPredicate上的文档。
答案 1 :(得分:1)
获得具有特定课程名称的所有学生的有效NSPredicate是什么?
[NSPredicate predicateWithFormat:@"name= %@", courseName];
使用上面的谓词来获取特定课程,同时具有name = courseName;在“课程”实体上设置该谓词而不是“学生”实体。
在执行上面的获取请求之后,您将拥有具有该courseName的课程数组。
Course *course = [fetchedResults objectAtIndex:0];
现在让所有学生参加该课程,
NSArray *students =[course.students allObjects];
现在学生是一组“学生”实体对象。
同样, 什么是有效的NSPredicate,用于获得具有特定firstName的学生注册的所有课程。
[NSPredicate predicateWithFormat:@"firstName = %@", name];
使用上面的谓词来获取name = firstName的特定学生;在“Student”实体上设置该谓词。
在执行上述获取请求后,您将拥有具有该firstName的学生数组。
Student *student = [fetchedResults objectAtIndex:0];
现在为该学生开设所有课程,
NSArray *courses =[student.courses allObjects];
现在,课程是一系列“课程”实体对象。
希望这有帮助。