1

Person、Region、Boundaryの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

持っているすべての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];

...これはうまくいくと思いますか?

于 2013-03-13T15:41:17.543 に答える
2

述部の「ANY」コレクション演算子は、ネストされたto-many関係では機能しません。ここでSUBQUERYを使用できます:

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