次のような述語を取得できます
ANY alpha.prop LIKE $SEARCH_TERM
アルファが対多の関係である場合に機能しますが、どうすれば取得できますか
ANY alpha.beta.prop LIKE $SEARCH_TERM
alphaが対多の関係であり、betaがalphaの対多の関係である場合に動作するようにすると、' multiple to-many keys not allowed here 'という例外がスローされます。
次のような述語を取得できます
ANY alpha.prop LIKE $SEARCH_TERM
アルファが対多の関係である場合に機能しますが、どうすれば取得できますか
ANY alpha.beta.prop LIKE $SEARCH_TERM
alphaが対多の関係であり、betaがalphaの対多の関係である場合に動作するようにすると、' multiple to-many keys not allowed here 'という例外がスローされます。
2 つのステップでそれを行うことができます。b
が からへの 1 対多の関係であり、 から から へのA
1対多の関係であると仮定すると、目的のプロパティを持つ任意のオブジェクトに関連するすべてのオブジェクトを最初に取得できます。B
c
B
C
B
C
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];
これを行う方法は、代わりに一番下の子要素で検索を行うことで、クエリ文字列は次のようになります
prop LIKE $SEARCH_TERM
次に、結果を列挙し、親の親を取得してセットに貼り付け、重複を削除します。
NSMutableSet * mySet = [NSMutableSet set];
for( MyChild * c in [self.managedObjectContext executeFetchRequest:theFetchRequest error:&theError] )
{
[mySet addObject:c.parent.parent];
}