我有一个包含三个实体的数据模型,如下所示:
Event:
id
startTime
->>invitees
User:
id
type
->>invitations (Invitees entity)
Invitees:
rsvpState
->user
->event
- > =一对一的关系
- >> =太多的关系
我要做的是创建一个谓词,该谓词返回某个类型和id的用户rsvp为“Y”并且startTime比现在更大的所有事件。我到目前为止最接近的是:
SUBQUERY(invitees.user,$ x,$ x.id ==%i AND $ x.type ==%i).invitations.rsvpState ==%@ AND startTime> %@
虽然我仍然得到奇怪的结果,但这并没有给我任何错误。我想我不完全理解子查询是如何工作的。
例如,在执行.invitations.rsvpSate ==%@时,检查传递谓词的所有用户是否具有invitation.rsvpState ==“Y”,还是检查生成的用户集合以查看是否其中任何一个都有邀请.rsvpState ==“Y”。
添加startTime> %@到查询结束时检查所有结果事件是否有startTime> %@或结果中的任何事件都有一个startTime> %@
Thx
答案 0 :(得分:2)
使用NSCompoundPredicate
的评论可能比SUBQUERY
更容易。它可以帮助您分解查询并提高可读性。
至于你的2个问题,答案总是全部。如果您需要“any”,还有谓词关键字ANY
。
假设id
User
是唯一的,您不需要type
属性。此外,我不确定您确实需要复合谓词或子查询。请尝试:
startTime > %@ AND invitees.user.id == %i AND invitees.rsvpState == %@