[ios]请使用什么谓词来取多对一关系中的不同对象?

发布时间: 2017/3/21 23:22:07
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

实体关系如下所示︰

Effect <->> EffectFilterProperty <<-> FilterProperty <<-> Filter

我需要所有不同筛选器有关的某种特别的效果 (这可以进行筛选其"名称"属性)。我需要什么样的谓词用于这种关系?

关系名称如下所示︰

Effect ->> EffectFilterProperty is filterPropertyValues
EffectFilterProperty -> FilterProperty is relatedFilterProperty
FilterProperty -> Filter is belongsToFilter

解决方法 1:

你需要反向关系去取与效果相关的筛选器。 精确的答案取决于哪种逆关系是一对,哪些是对多。例如,如果你有

  • 作为对一的关系,从"筛选器"到"FilterProperty","filterProperty"
  • 作为对多关系从"FilterProperty"到"EffectFilterProperty","effectFilters"
  • 作为对一的关系,从"EffectFilterProperty"到"效果","效应"

然后你会执行读取请求上的"筛选器"实体与谓词

[NSPredicate predicateWithFormat:@"ANY filterProperty.effectFilters.effect.name = %@",
       theEffectName];

如果所有的逆关系到一个然后省略"ANY"。如果多个逆关系是对多那么就稍微复杂,你需要使用"查询"谓词。

更新更新的问题:"任何"不能与多个嵌套对多关系,你需要一个"子查询":

 [NSPredicate predicateWithFormat:@"SUBQUERY(filterProperties, $fp, ANY $fp.effectFilterProperties.effect.name = %@).@count > 0", effectName];

关于取"不同"的对象︰ 读取请求始终返回不同的托管的对象,它将永远不会返回同一对象两次。-如果你需要有一些或所有属性的不同的对象,然后您必须设置读取请求 resultTypeNSDictionaryResultTypereturnsDistinctResultsYES

赞助商