首页 文章

核心数据搜索2个关系

提问于
浏览
1

我有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

2 回答

  • 2

    谓词中的“ANY”集合运算符不适用于嵌套的多对多关系 . 你可以在这里使用SUBQUERY:

    [NSPredicate predicateWithFormat:@"SUBQUERY(regions, $r, ANY $r.persons == %@).@count > 0", thePerson]];
    
  • 2

    要获得 Person 所拥有的所有 Boundary 实体,您可以像这样使用 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];
    

    ......我觉得这可行吗?

相关问题