1

次のような述語を取得できます

ANY alpha.prop LIKE $SEARCH_TERM

アルファが対多の関係である場合に機能しますが、どうすれば取得できますか

ANY alpha.beta.prop LIKE $SEARCH_TERM

alphaが対多の関係であり、betaalphaの対多の関係である場合に動作するようにすると、' multiple to-many keys not allowed here 'という例外がスローされます。

4

2 に答える 2

1

2 つのステップでそれを行うことができます。bが からへの 1 対多の関係であり、 から から へのA1対多の関係であると仮定すると、目的のプロパティを持つ任意のオブジェクトに関連するすべてのオブジェクトを最初に取得できます。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 に答える