【发布时间】:2020-06-23 13:42:18
【问题描述】:
我有一个 CoreData 结构。它对我来说很好。现在我正在尝试做一个有趣的FetchRequest,但是我正在努力寻找正确的predicate。
我有两个实体,Person 和 Venues。一个人可以连接到多个场所,但只能连接到同一个venue。和其他方式。
我创建了一个映射表,它将person 和venue 保存为关系。这里一切正常。我什至实现了inverse 关系。
左图是我的场地。我想根据当前场地获取所有persons,该场地已经创建了NO Mapping。
我的方法是使用pk_venue,它给了我一组PersonVenueMapping。但是,我怎样才能只使用该集合的persons。
fetch.predicate = NSPredicate(format: "NOT (person IN %@)", venue!.pk_venue[HELP])
我想出了那个谓词。但是,我如何访问该集合的人员?我需要一个仅包含persons 的数组/集合,它们连接到当前对象。
编辑:只是给你举个例子。
人员:Max、Leon、Henry
地点:地点 1、地点 2、地点 3、地点 4
PersonVenueMapping:最大 Venue1
现在当我选择Max 时,我想要Venue2 & Venue3 & Venue4
提前致谢
【问题讨论】:
-
为什么需要映射实体,为什么不在 Person 和 Venue 之间创建多对多映射?
-
不,但也许您不需要 3 个这样的关系,具体取决于此上下文中的角色。
-
如果设计是一个人有一个场地的角色,那么关系应该反映这一点。
-
这看起来很像您将 CoreData 视为一个数据库,而实际上它并不是一个数据库。以应用程序将显示的方式对数据进行建模。不像标准化的 SQLite 数据库那样。
-
@Fogmeister 谢谢.. 是的,你是对的。我仍然习惯于来自常规关系数据库的 CoreData。你还说我不需要映射表?
标签: swift macos core-data swiftui