我可以得到一个谓词
ANY alpha.prop LIKE $SEARCH_TERM
在alpha是一对多关系的情况下工作,但我如何得到
ANY alpha.beta.prop LIKE $SEARCH_TERM
要在alpha是一对多关系且beta是alpha上的一对多关系的情况下工作,这会引发异常“此处不允许多对多键”。
我可以得到一个谓词
ANY alpha.prop LIKE $SEARCH_TERM
在alpha是一对多关系的情况下工作,但我如何得到
ANY alpha.beta.prop LIKE $SEARCH_TERM
要在alpha是一对多关系且beta是alpha上的一对多关系的情况下工作,这会引发异常“此处不允许多对多键”。
您可以分两步完成。假设从 to 是b
一对多关系,从 toA
是一对多关系 ,那么您可以首先获取与具有所需属性的任何对象相关的所有对象:B
c
B
C
B
C
NSFetchRequest *request1 = [NSFetchRequest fetchRequestWithEntityName:@"B"];
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"ANY(c.prop) LIKE %@", searchTerm];
request1.predicate = predicate1;
NSArray *bList = [context executeFetchRequest:request1 error:NULL];
然后从中间结果中获取A
与任何对象相关的所有对象:B
NSFetchRequest *request2 = [NSFetchRequest fetchRequestWithEntityName:@"A"];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"ANY(b) IN %@", bList];
request2.predicate = predicate2;
NSArray *aList = [context executeFetchRequest:request2 error:NULL];
好的,这样做的方法是在底部子元素上进行搜索,以便查询字符串变为
prop LIKE $SEARCH_TERM
然后枚举结果并抓住父级的父级并将它们粘贴在一个集合中以删除重复项,例如
NSMutableSet * mySet = [NSMutableSet set];
for( MyChild * c in [self.managedObjectContext executeFetchRequest:theFetchRequest error:&theError] )
{
[mySet addObject:c.parent.parent];
}