使用魔法记录从核心数据中获取关系实体

Posted

技术标签:

【中文标题】使用魔法记录从核心数据中获取关系实体【英文标题】:Fetch relational entity from core data using magical record 【发布时间】:2015-06-25 16:06:15 【问题描述】:

我正在维护一个已经使用魔法记录 (https://github.com/magicalpanda/MagicalRecord/wiki) 作为核心数据桥接的项目,我想编写一个 fetch 函数,但不知道如何编写。以下是要求:

我有实体 Person 和 Event。一个人可以没有或有很多事件,例如观光、踢足球……在 *.xcdatamodelId 文件中,Person 实体与 Event 实体链接(多对多关系)。在 Person 实体的属性表中,我看到没有与 Event 实体相关的属性(是的,在 Person 实体中没有 eventId)。在事件“表”中,也没有 personId。唯一连接 Person 和 Event 的是已设置的“对多”关系。

事件实体有一个“类型”属性:Entity.type 可能等于“运动”、“休闲”等。事件实体也有一个“日期”值。

这就是我想要获取的内容:我想要获取至少具有一个“运动”类型事件的所有 Person,并且我还想要获取最旧的 Entity.date。

如果是 SQLite,我会加入 Person 和 Entity 表,其中 Entity.type == "sport"。如果有join的记录,我会根据Event.date对表进行排序,然后检索第一个。

但我怎么能用 Magical Record 做到这一点呢?

已编辑:我知道如何设置谓词来搜索 Person,例如:

NSPredicate *peopleFilter = [NSPredicate predicateWithFormat:@"Department IN %@", @[dept1, dept2]];
NSArray *people = [Person MR_findAllWithPredicate:peopleFilter];

但在我的情况下Person没有eventId,Event没有personId,所以这不适用。

【问题讨论】:

【参考方案1】:

我终于找到了解决方案。这可以简单地完成如下:

 NSPredicate *peopleFilter = [NSPredicate predicateWithFormat:@"ANY events.eventType contains %@",@"love"];
    NSArray *people = [Person MR_findAllWithPredicate:peopleFilter];
    return people;

(一个人有一系列事件)

【讨论】:

以上是关于使用魔法记录从核心数据中获取关系实体的主要内容,如果未能解决你的问题,请参考以下文章

核心数据需要时间来插入具有获取实体的记录并设置为关系

将数据提取到 uipickerview 时出错?

在实体框架核心中获取最新记录

从具有实体之间关系的核心数据中获取数据[重复]

从核心数据中的实体中删除记录

如何使用魔法记录保存 2 个实体