Как создать запрос базовых данных для объектов без взаимосвязанного элемента? - PullRequest
2 голосов
/ 24 ноября 2011

Скажем, у меня есть объект Core Data, который называется "Bucket". Bucket имеет имя и отношение «многие к одному», называемые «items», с сущностью с именем «Item», которая имеет атрибут «url». Бизнес-правило требует, чтобы элемент с заданным URL-адресом мог быть помещен в корзину только один раз. (Помимо: Человек, я бы хотел, чтобы в Базовых данных были правильные ограничения!) Вот мой вопрос: Как я могу получить корзины, которые не содержат элемент с заданным URL-адресом?

IOW, как я могу сделать эквивалент этого SQL в основных данных?

SELECT name FROM buckets
 WHERE bucket_id NOT IN (
    SELECT bucket_id FROM items WHERE url = ?
);

Возможно ли использование предикатов для запросов на выборку основных данных?

1 Ответ

2 голосов
/ 24 ноября 2011

Дайте мне посмотреть, правильно ли я понял:

У вас есть

  • Bucket с name свойством
  • Item с url свойством

и такие отношения

Bucket <--- >> Item

т.е. в ведре может быть несколько предметов, но каждый предмет находится только в одном ведре.

Теперь вам нужно Выражение подзапроса :

(SUBQUERY(items, $x, $x.url == %@).@count == 0)

т.е. * * тысяча двадцать восемь

NSString *urlAsString; // Assume we have this
NSPredicate *p = [NSPredicate predicateWithFormat:@"(SUBQUERY(items, $x, $x.url == %@).@count == 0)", urlAsString];

И вам понадобится индекс на url для Item по соображениям производительности.

...