使用魔法记录从核心数据中获取关系实体
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;
(一个人有一系列事件)
【讨论】:
以上是关于使用魔法记录从核心数据中获取关系实体的主要内容,如果未能解决你的问题,请参考以下文章