Упрощение нескольких запросов на выборку - PullRequest
1 голос
/ 09 января 2012

У меня есть эта основная иерархия модели данных с соответствующими отношениями друг к другу:

КОМПАНИЯ -> ПОДРАЗДЕЛЕНИЯ -> ОТДЕЛЫ -> СОТРУДНИКИ -> ФОТОГРАФИИ

Если я хочу собрать всефотографии сотрудников из отдела Мне нужно:

  1. Получить, чтобы найти, в каких отделах есть подразделение.
  2. Получить, чтобы найти всех сотрудников в каждом отделе в отделе
  3. Получить каждого сотрудника, чтобы найти, есть ли фотографии ....
  4. Добавить фотографию в массив.

Если в циклах 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;

}

Кто-нибудь может предложить лучшее решение или как такие запросы могут быть выполнены?

1 Ответ

2 голосов
/ 09 января 2012

Предполагается, что вы устанавливаете обратные отношения для всего:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Photos"];    
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"employee.department.division = %@", division"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...