以下是关系图。我有一组我已检索的食谱和一组BaseIngredients。我想要返回一组包含所有这些成分的食谱。我当前的谓词
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@ AND ingredientSections.ingredients.baseIngredient IN %@", recipes, self.ingredientsFilter];
悲惨地失败了。这样做的正确方法是什么?
答案 0 :(得分:1)
使用嵌套的to-many关系,您可能需要一个SUBQUERY。
以下谓词将返回所有配方,其中任何成分部分的任何基本成分都在给定集合中:
[NSPredicate predicateWithFormat:@"SELF IN %@ AND SUBQUERY(ingredientSections, $s, ANY $s.ingredients.baseIngredient IN %@).@count > 0",
recipes, self.ingredientsFilter];
但不幸的是,这并不是你所需要的。获得所有食谱 包含所有给定成分的部分,以下内容可能有效:
[NSPredicate predicateWithFormat:@"SELF IN %@ AND SUBQUERY(ingredientSections, $s, SUBQUERY($s.ingredients, $i, $i.baseIngredient IN %@).@count == %d).@count > 0",
recipes, self.ingredientsFilter, [self.ingredientsFilter count]];