我有3个实体:Person,Region和Boundary。边界具有“状态”属性。一个人可以有很多地区。一个地区可以有很多边界:
Person <<-->> Region <<-->> Boundary.state
使用Person实体,我想找出他有一个边界的所有状态。谓词可以进行这种搜索还是我需要进行嵌套搜索:
NSMutableArray *states = [NSMutableArray array];
for (Region *region in person.regions) {
for (Boundary *boundary in region.boundaries) {
// add state to array
}
}
编辑:
对不起,我不是一个数据库人,并且没有想到它意识到它们是多对多的关系:
Person<<-->>Region<<-->>Boundary
答案 0 :(得分:2)
要获取Boundary
所拥有的Person
个实体,您可以使用NSFetchRequest
这样的实体......
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Boundary"];
[request setPredicate:[NSPredicate predicateWithFormat:@"region.person = %@", thePerson]];
这将返回Boundary
个实体的数组,其Person
是您放在谓词中的实体。
然后你可以......
NSSet *states = [NSSet setWithArray:[results valueForKey:@"state"]];
然后状态将是人“拥有”的一组唯一状态。
随着这些变化的多次发生。
你可以为谓词做一些事情......
[NSPredicate predicateWithFormat:@"ANY region IN %@", thePerson.regions];
......我认为这可行吗?
答案 1 :(得分:2)
谓词中的“ANY”集合运算符不适用于嵌套的多对多关系。你可以在这里使用SUBQUERY:
[NSPredicate predicateWithFormat:@"SUBQUERY(regions, $r, ANY $r.persons == %@).@count > 0", thePerson]];