核心数据:以一对多的关系获取实体的获取请求
Posted
技术标签:
【中文标题】核心数据:以一对多的关系获取实体的获取请求【英文标题】:Core Data: fetch request for fetching entities in a one-many-one relationship 【发布时间】:2012-10-09 22:26:28 【问题描述】:假设我有 3 个实体 Grandparent
、Parent
和 Child
。
Grandparent - Parent
是一对多的关系
Parent - Child
是多对一的关系
Child
有一个age
属性
我的目标是获取Parent
的所有Child
实体,其中Parent.grandparent
是某个Grandparent
。另外,我想按age
对获取的结果进行排序。我知道我可以通过多个步骤来做到这一点,但我的问题是:我怎样才能在一个 fetch 请求中完成这个?
编辑:也许这张图会比上面的描述清楚一点。
【问题讨论】:
【参考方案1】:我假设变量和关系名称,将它们更改为您在代码和模型中命名的任何名称。
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Child" inManagedObjectContext:context];
request.predicate = [NSPredicate predicateWithFormat:@"parent.grandparent == %@", grandParentObject];
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES]];
这应该可行。我习惯了代码完成,我没有在 Xcode 中输入这个,所以方法名称可能有点偏离,但你明白了。
【讨论】:
如果省略谓词,你会得到什么吗?如果是这样,请检查您的 grandParentObject 并确保它是至少一个 Child 的 Parent 对象的一部分。 省略谓词,我确实得到了一些东西。你认为这个问题与 Child 的 Parent 对象的 NSSet 有关吗? (孩子与父母是一对多的关系) 对不起,我看错了。所以一个孩子可以有多个父母,但一个父母只能有一个孩子,对吗?【参考方案2】:我很幸运,找到了这个答案 NSPredicate acting strange in NSFetchedResultsController
这个问题的措辞不同,这就是我花了一段时间才找到它的原因。基本上,我正在寻找的谓词是以下格式:
[NSPredicate predicateWithFormat:@"SUBQUERY(parent, $x, $x.grandparent == %@).@count != 0", grandParent];
【讨论】:
以上是关于核心数据:以一对多的关系获取实体的获取请求的主要内容,如果未能解决你的问题,请参考以下文章