У меня есть эта основная иерархия модели данных с соответствующими отношениями друг к другу:
КОМПАНИЯ -> ПОДРАЗДЕЛЕНИЯ -> ОТДЕЛЫ -> СОТРУДНИКИ -> ФОТОГРАФИИ
Если я хочу собрать всефотографии сотрудников из отдела Мне нужно:
- Получить, чтобы найти, в каких отделах есть подразделение.
- Получить, чтобы найти всех сотрудников в каждом отделе в отделе
- Получить каждого сотрудника, чтобы найти, есть ли фотографии ....
- Добавить фотографию в массив.
Если в циклах 3 запроса, то производительность - это катастрофа!
-(NSArray *)getPhotosForCategory: (NSManagedObject *)division {
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Divisions"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"division == %@", department];
[request setPredicate:predicate];
NSError *error;
divisions = [managedObjectContext executeFetchRequest:request error:&error];
NSMutableArray *employeesArray = [[NSMutableArray alloc] init];
for (NSManagedObject *object in divisions) {
NSFetchRequest *employeesRequest = [NSFetchRequest fetchRequestWithEntityName:@"Employees"];
NSPredicate *employeesPredicate = [NSPredicate predicateWithFormat:@"department == %@", object];
[employeesRequest employeesPredicate];
NSArray *employees = [managedObjectContext executeFetchRequest:employeesRequest error:&error];
[employeesArray addObjectsFromArray:places];
}
NSMutableArray *photosArray = [[NSMutableArray alloc] init];
for (NSManagedObject *object in employeesArray) {
NSFetchRequest *photosRequest = [NSFetchRequest fetchRequestWithEntityName:@"Photos"];
NSPredicate *photosPredicate = [NSPredicate predicateWithFormat:@"employee == %@", object];
[photosRequest setPredicate:photosPredicate];
NSArray *photos = [managedObjectContext executeFetchRequest:photosRequest error:&error];
[photosArray addObjectsFromArray:photos];
}
return photosArray;
}
Кто-нибудь может предложить лучшее решение или как такие запросы могут быть выполнены?