我可以得到像
这样的谓词ANY alpha.prop LIKE $SEARCH_TERM
在 alpha 是多对多关系的地方工作,但我该如何获得
ANY alpha.beta.prop LIKE $SEARCH_TERM
在 alpha 是多对多关系的情况下工作 beta 是多对多关系 alpha ,这会引发异常'此处不允许的多个密钥'。
答案 0 :(得分:1)
你可以分两步完成。我们假设b
是从A
到B
的一对多关系,c
是从B
到C
的一对多关系{1}},然后您可以首先获取与具有所需属性的任何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];
答案 1 :(得分:0)
好的方法是在底部子元素上进行搜索,以便查询字符串变为
prop LIKE $SEARCH_TERM
然后枚举结果并抓住父级的父级并将它们粘贴在一个集合中以删除重复项,例如
NSMutableSet * mySet = [NSMutableSet set];
for( MyChild * c in [self.managedObjectContext executeFetchRequest:theFetchRequest error:&theError] )
{
[mySet addObject:c.parent.parent];
}