任何一对多一对多谓词
问题描述:
我能得到像任何一对多一对多谓词
ANY alpha.prop LIKE $SEARCH_TERM
谓语为工作在阿尔法是一个一对多的关系,但是我如何才能
ANY alpha.beta.prop LIKE $SEARCH_TERM
要工作alpha是一对多的关系,并且beta是一对多关系alpha,这会引发异常'多对多密钥不允许在这里'。
答
确定的方式要做到这一点是做底子元素的搜索代替查询字符串变成
prop LIKE $SEARCH_TERM
,然后通过结果枚举并抓住父母的父母把它们粘在一套删除重复,像
NSMutableSet * mySet = [NSMutableSet set];
for(MyChild * c in [self.managedObjectContext executeFetchRequest:theFetchRequest error:&theError])
{
[mySet addObject:c.parent.parent];
}
答
你可以分两步做。让我们假设b
从A
到B
和c
一个一对多的关系是从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];
您是否在核心数据中设置了这种关系的反转? – 2012-08-10 07:52:48