我想为两个实体创建一个联接表(badgeprofile):hubprofile和badge。见下图
问题1:我想知道如何创建一个“badgeprofile”对象。此对象应映射到一个“HubProfile”和一个“Badge”对象
问题2:一旦创建了“badgeprofile”对象,以后“hubprofile”和“badge”都可以访问该对象。(例如:hubprofile.badgeprofile)我该怎么做?
以下是实体的类:
Hub配置文件
class HubProfile: NSManagedObject {
@NSManaged var id: NSNumber?
@NSManaged var name: String?
@NSManaged var hubBadgeProfiles: NSOrderedSet?
}
徽章
class Badge: NSManagedObject {
@NSManaged var id: NSNumber?
@NSManaged var name: String?
@NSManaged var score: NSNumber?
@NSManaged var badgeProfiles: NSOrderedSet?
}
徽章简介
class BadgeProfile: NSManagedObject {
@NSManaged var id: NSNumber?
@NSManaged var badge: Badge?
@NSManaged var hubProfile: HubProfile?
}
P.S:我知道我不需要创建一个联接表,并且可以在HubProfileBadge之间建立多对多的关系。但是我想创建join表,因为它可以很容易地与后端数据库交互。
最佳答案
要创建联接表对象,请执行以下操作:
创建它的方式与创建任何其他实体的方式相同,例如通过
NSEntityDescription.insertNewObjectForEntityForName(...)
然后只需添加要链接的对象。
badgeProfile.hubProfile = hubProfile
badgeProfile.badge = badge
我劝你不要用定购的电视机。它们复杂且容易出错。举个例子,上面的问题真的让人头疼。相反,在
BadgeProfile
实体中使用一个number属性来自己跟踪订单。访问连接的对象
这里没什么特别的。获取个人资料的所有徽章:
profile.hubBadgeProfiles.map { $0.badge! }
(我认为您的属性名称选择不当。我建议
badges
和另一侧的等效物,对于profiles
实体Badge
。获取特定徽章:
profile.badges.filter { $0.badge!.name == "Gold" }.first as? Badge
使用模拟模式向另一个方向移动。