NSPredicate для выборки элементов из отношения ко-многим, исключая конкретный связанный объект - PullRequest
1 голос
/ 12 февраля 2020

У меня есть базовая дата установки:

Item-
id: String
name: String
projects: [Project]? (many-to-many optional relationship)

Project-
id: String
name: String
items: [Item]? (many-to-many optional relationship)

Когда я хочу получить все элементы из определенного проекта, я использую этот предикат:
NSPredicate(format: "ANY projects.id == %@", project.id)

Теперь, Я должен забрать все предметы, которые не имеют отношения к конкретному проекту. Для этого я пытаюсь использовать приведенный ниже предикат:
NSPredicate(format: "(projects.@count == 0) OR (NONE projects.id == %@)", project.id)

Проблема с этим предикатом заключается в том, что он некорректно работает с элементами, которые связаны с несколькими проектами.

1 Ответ

1 голос
/ 12 февраля 2020

Я бы рекомендовал использовать SUBQUERY вместо ЛЮБЫХ, ВСЕХ, НЕТ операторов, которые предоставляет Apple (в частности, НИКТОМ следует избегать).

NSPredicate(format: "SUBQUERY(projects, $p, $p.id == %@).@count == 0", project.id)
...