1

我可以得到一个谓词

ANY alpha.prop LIKE $SEARCH_TERM

alpha是一对多关系的情况下工作,但我如何得到

ANY alpha.beta.prop LIKE $SEARCH_TERM

要在alpha是一对多关系且betaalpha上的一对多关系的情况下工作,这会引发异常“此处不允许多对多键”。

4

2 回答 2

1

您可以分两步完成。假设从 to 是b一对多关系,从 toA是一对多关系 ,那么您可以首先获取与具有所需属性的任何对象相关的所有对象:BcBCBC

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];
于 2012-08-12T10:49:53.600 回答
0

好的,这样做的方法是在底部子元素上进行搜索,以便查询字符串变为

prop LIKE $SEARCH_TERM

然后枚举结果并抓住父级的父级并将它们粘贴在一个集合中以删除重复项,例如

NSMutableSet  * mySet = [NSMutableSet set];
for( MyChild * c in [self.managedObjectContext executeFetchRequest:theFetchRequest error:&theError] )
{
    [mySet addObject:c.parent.parent];
}
于 2012-09-10T12:43:27.023 回答