2013-04-28 93 views
0

我有三個實體:Institution,Course,Student 一個機構可以有很多課程,一個課程只能有一個Institution(1 - many) 一個課程可以有很多學生,一個學生可以加入很多課程(很多 - 很多)。TWICE相關實體CoreData計數記錄

計數的機構的課程是非常簡單的,其關係爲「課程」:

int numberCourses = institution.course.count; 

我的問題:

我怎麼能指望在一個機構的學生的數量? 在實體課程中,我與實體學生有關係「學生」。我怎樣才能從機構通過課程訪問學生?

注意:學生可以成爲許多課程的成員,因此他有可能成爲許多機構的成員。

說它簡單,模擬上面的代碼行,我想這一點:

機構 - >所有課程 - > student.count

感謝您的幫助! C.

回答

2

有兩種不同的解決方案。你可以設定該機構的所有學生和 盡數:

NSSet *students = [institution valueForKeyPath:@"courses.students"]; 
NSUInteger numberOfStudents = [students count]; 

(我已經使用了複數形式的一對多關係,我覺得更直觀。)

或者你打造取爲相關機構對學生的要求:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Student"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY courses.institution == %@", institution]; 
[request setPredicate:predicate]; 
NSUInteger numberOfStudents = [context countForFetchRequest:request error:&error]; 

第二個解決方案的優點是,學生對象和中間課程對象沒有加載到內存中。在SQLite級別上計數對象的數量爲 。

+0

+1爲第二個版本;) – HAS 2013-04-28 18:09:05

+0

嘿男人!!!!非常感謝。我一直試圖從機構方面看待。非常簡單,首先嚐試工作!完善!我採取了第二種解決方案。 – Claus 2013-04-28 19:38:35