別のエンティティ OrderItemOption と対多関係にある Core Data エンティティ OrderItem があります。2 つの特定の OrderItemOptions と関係がある特定の OrderItem を見つけたいと考えています。Core Data でそれを行うにはどうすればよいですか?
OrderItemOptions にはタイプコードとオプションコードがあり、基本的にはキー/値です。オプション (typecode=OptionSet1、optionCode=BT) と別のオプション (typecode=OptionSet2、optionCode=CT) を持つ orderItem を探しています。
問題は、クエリで最初の OrderItemOption オブジェクトと 2 番目のオブジェクトを区別する方法です。
やりたいことを正確に実行するための SQL クエリを思いつくことができました。エイリアスを使用して、テーブルをそれ自体と結合します。Core Data で同等のことを行うにはどうすればよいですか?
SQL ステートメントは次のとおりです。
select * from zorderItem, zorderItemOption one, zorderItemOption two where
one.zorderitem = zorderItem.z_pk and
one.zoptiontypecode='OptionSet1' and one.zoptioncode='BT' and
two.zorderitem =zorderitem.z_pk and
two.zoptiontypecode='OptionSet2' and two.zoptioncode='CT';
述語の「ANY」キーワードの背後にあるセマンティクスに完全に従っているとは思いません。親しくなることができた、
NSPredicate *pre = [NSPredicate predicateWithFormat:
@"order == %@ and
(any options.optionTypeCode == %@ and any options.optionCode == %@)
and
(any options.optionTypeCode == %@ and any options.optionCode == %@)",
order, @"OptionSet1", @"BT", @"OptionSet2", @"CT"];
しかし、optionCodes が逆になった場合にも一致しました。
各括弧式の外で「ANY」を因数分解しようとしましたが、解析例外が発生しました。
おそらく、より単純な例も興味深いでしょう。Books との対多関係を持つ Author エンティティがある場合はどうなるでしょうか。「Book1」というタイトルの本と「Book2」というタイトルの本の両方を書いた著者を見つける、という述語を作成するにはどうすればよいでしょうか。