Имеет много сквозных отношений в Core Data / Objective-C - PullRequest
0 голосов
/ 26 января 2011

Я пытаюсь воссоздать отношение has_many: посредством (как в Rails) с Objective-C, если базовые данные поддерживаются SQLite, это должно быть возможно, верно? <rant> Я мог бы написать необработанный SQL для этого за 2 секунды ... </rant>

Во всяком случае, в основном это подмножество моей схемы: TutorGroup ---- ---- Категория, которую мне нужно получить, это все категории, которые выделены для определенной группы репетиторов.

Вот мой запрос:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(Allocation, $row, $row.tutor_group == %@ AND $row.category == <CURRENT_ROW>).@count > 0)", tutor_group];

Есть ли способ представить объект текущей строки в подзапросе (где я написал <CURRENT_ROW>? Я пытался использовать self, но это не работает.

Кроме того, я предполагаю, куда я положил Allocation - это имя таблицы, для которой я хочу выполнить подзапрос?

Приветствие.

Ответы [ 2 ]

2 голосов
/ 26 января 2011

Я не уверен, что это будет работать, но попробуйте это:

ANY Allocation.TutorGroup = %@

Затем передайте свою группу репетиторов с использованием предикатаWithFormat и запустите ее в категории.

2 голосов
/ 26 января 2011

Стандартный способ в CoreData - это иметь все обратные отношения. Тогда вам не нужно использовать предикаты вообще.

Наличие обратных связей действительно рекомендуется ... см. этот официальный документ.

Итак, предположим, что сущность TutorGroup имеет отношение ко многим allocations, а Allocation имеет отношение к одному category. Тогда

NSArray* categories = [tutor_group.allocations valueForKeyPath:@"@distinctUnionOfObjects.category"];

Смотрите обсуждение операторов коллекции здесь .

Как правило, когда вы используете Core Data, вам не следует знать, что CoreData поддерживается SQLite. Это дает вам душевное спокойствие.

...