2011-08-19 2 views
0

다음과 같은 세 개의 엔티티가있는 데이터 모델이 있습니다.원하는 엔티티를 가져 오는 NSPredicate가 생겨나지 않았습니까?

Event: 
id 
startTime 
->>invitees 

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

Invitees: 
rsvpState 
->user 
->event 

-> = to-one 관계

- >> = 너무 많은 관계

특정 유형 및 ID의 사용자가 rsvp'd "Y"를 가지며 지금보다 큰 startTime을 갖는 모든 이벤트를 리턴하는 술어. 가장 가까운 i는 지금까지 왔습니다 :

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

이상한 결과가 나더라도 오류는 발생하지 않습니다. 나는 서브 쿼리가 어떻게 작동하는지 완전히 이해하지 못한다고 생각한다.

  1. 예를 들어 .invitations.rsvpSate == % @를 수행 할 때 술어를 전달하는 모든 사용자가 invitation.rsvpState == "Y"를 갖거나 사용자의 결과 콜렉션을 확인하는지 확인합니다 그들 중 누구라도 invitation.rsvpState == "Y"를 가지고 있다면.

  2. 쿼리의 끝 부분에 startTime> % @을 추가하면 모든 결과 이벤트의 startTime> % @ 또는 결과의 이벤트 중 하나에 startTime> % @이 있는지 확인합니다.

Thx

답변

2

은 아마 SUBQUERY보다 NSCompoundPredicate의 평가자를 사용하는 것이 더 쉽습니다. 그것은 당신이 당신의 질문을 나누고 더 읽기 쉬울 것을 도울 것입니다.

귀하의 2 가지 질문에 대한 대답은 항상 ALL입니다. "any"가 필요한 경우를 대비하여 술어 키워드 ANY도 있습니다.

idUser 인 것으로 가정하면 type 속성이 필요하지 않습니다. 또한 실제로 복합 술어 나 하위 쿼리가 필요한지 잘 모르겠습니다. 시도해보십시오 :

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

작동 했습니까? 수락 눈금을 눌러보십시오. – Mundi

관련 문제