下面是关系图。我有一组我检索到的食谱和一组基本成分。我想返回一组包含所有这些成分的食谱。我当前的谓词
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@ AND ingredientSections.ingredients.baseIngredient IN %@", recipes, self.ingredientsFilter];
惨败。这样做的正确方法是什么?
下面是关系图。我有一组我检索到的食谱和一组基本成分。我想返回一组包含所有这些成分的食谱。我当前的谓词
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@ AND ingredientSections.ingredients.baseIngredient IN %@", recipes, self.ingredientsFilter];
惨败。这样做的正确方法是什么?
对于嵌套的多对多关系,您可能需要一个 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]];