Не могу придумать NSP-предикат, который получает сущности, которые я хочу? - PullRequest
0 голосов
/ 19 августа 2011

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

Event:
id
startTime
->>invitees

User:
id
type
->>invitations  (Invitees entity)

Invitees:
rsvpState
->user
->event

-> = отношение один к одному

- >> = слишком много отношений

То, что я пытаюсь сделать, - это создать предикат, который возвращает все события, для которых пользователь определенного типа и идентификатора имеет rsvp'd "Y" и имеет startTime больше, чем сейчас. Самое близкое, что я дошел, это:

SUBQUERY (invites.user, $ x, $ x.id ==% i AND $ x.type ==% i) .invitations.rsvpState ==% @ AND startTime>% @

Это не дает мне никаких ошибок, хотя я все еще получаю странные результаты. Я думаю, я не до конца понимаю, как работают подзапросы.

  1. Например, при выполнении .invitations.rsvpSate ==% @ проверяется, что у ВСЕХ пользователей, которые передают предикат, есть приглашение. У ЛЮБОГО из них есть приглашение.rsvpState == "Y".

  2. При добавлении startTime>% @ в конец запроса проверяется, имеет ли ВСЕ результирующие события startTime>% @ или что ЛЮБОЕ из событий в результатах имеет startTime>% @?

Thx

1 Ответ

2 голосов
/ 20 августа 2011

Возможно, проще использовать NSCompoundPredicate с оценкой, чем SUBQUERY.Это поможет вам разделить ваш запрос и будет более читабельным.

Что касается ваших 2 вопросов, ответ всегда ВСЕ.Существует также ключевое слово предиката ANY на случай, если вам нужно "any".

При условии, что id из User уникально, вам не нужно свойство type.Кроме того, я не уверен, что вам действительно нужен составной предикат или подзапрос.Пожалуйста, попробуйте:

startTime > %@ AND invitees.user.id == %i AND invitees.rsvpState == %@
...