0

下面是关系图。我有一组我检索到的食谱和一组基本成分。我想返回一组包含所有这些成分的食谱。我当前的谓词

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@ AND ingredientSections.ingredients.baseIngredient IN %@", recipes, self.ingredientsFilter];

惨败。这样做的正确方法是什么?

对象图

4

1 回答 1

1

对于嵌套的多对多关系,您可能需要一个 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]];
于 2013-07-24T09:49:24.793 回答