2012-08-10 76 views
1

我能得到像任何一對多一對多謂詞

ANY alpha.prop LIKE $SEARCH_TERM 

謂語爲工作在阿爾法是一個一對多的關係,但是我如何才能

ANY alpha.beta.prop LIKE $SEARCH_TERM 

要工作alpha是一對多的關係,並且beta是一對多關係alpha,這會引發異常'多對多密鑰不允許在這裏'。

+0

您是否在覈心數據中設置了這種關係的反轉? – 2012-08-10 07:52:48

回答

0

確定的方式要做到這一點是做底子元素的搜索代替查詢字符串變成

prop LIKE $SEARCH_TERM 

,然後通過結果枚舉並抓住父母的父母把它們粘在一套刪除重複,像

NSMutableSet * mySet = [NSMutableSet set]; 
for(MyChild * c in [self.managedObjectContext executeFetchRequest:theFetchRequest error:&theError]) 
{ 
    [mySet addObject:c.parent.parent]; 
} 
1

你可以分兩步做。讓我們假設bABc一個一對多的關係是從B一個一對多的關係C,那麼你可以先獲取該相關的任何C對象具有所需性能的所有B對象:

NSFetchRequest *request1 = [NSFetchRequest fetchRequestWithEntityName:@"B"]; 
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"ANY(c.prop) LIKE %@", searchTerm]; 
request1.predicate = predicate1; 
NSArray *bList = [context executeFetchRequest:request1 error:NULL]; 

然後取被從中間結果與任何B對象的所有對象A

NSFetchRequest *request2 = [NSFetchRequest fetchRequestWithEntityName:@"A"]; 
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"ANY(b) IN %@", bList]; 
request2.predicate = predicate2; 

NSArray *aList = [context executeFetchRequest:request2 error:NULL];