1

我有 3 个实体:人员、区域和边界。边界具有“状态”属性。一个人可以有很多区域。一个区域可以有许多边界:

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
4

2 回答 2

2

要获得Boundarya 拥有的所有实体,Person您可以使用NSFetchRequest这样的...

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Boundary"];

[request setPredicate:[NSPredicate predicateWithFormat:@"region.person = %@", thePerson]];

这将返回一个Boundary实体数组,该数组Person就是您放入谓词中的实体。

然后你可以做...

NSSet *states = [NSSet setWithArray:[results valueForKey:@"state"]];

那么 states 将是 Person“拥有”的一组唯一状态。

随着多对多的变化。

你可以为谓词做一些类似的事情......

[NSPredicate predicateWithFormat:@"ANY region IN %@", thePerson.regions];

...我认为这可能有效?

于 2013-03-13T15:41:17.543 回答
2

谓词中的“ANY”集合运算符不适用于嵌套的一对多关系。您可以在此处使用 SUBQUERY:

[NSPredicate predicateWithFormat:@"SUBQUERY(regions, $r, ANY $r.persons == %@).@count > 0", thePerson]];
于 2013-03-13T16:07:15.460 回答