gpt4 book ai didi

ios - 核心数据通过带有自定义字段的表实现多对多

转载 作者:搜寻专家 更新时间:2023-11-01 07:22:44 24 4
gpt4 key购买 nike

我的对象模型有文章和媒体,其中文章以多对多关系引用媒体。媒体可能有不同的顺序,需要存储该媒体相对于文章的顺序,即不在媒体本身上。

Core Data内部生成一个sqlite数据库,直通表为:

article_id, media_id

Core Data/MagicalRecord 对象是文章和媒体:

class Article: NSManagedObject {
...
@NSManaged var media: NSSet
}

class Media: NSManagedObject {
...
}

Core Data 中是否有一种方法可以在直通表机制中保持媒体的顺序?相反,每次文章使用该媒体时,我似乎都需要创建一个具有自己位置的新媒体记录。

在 Django 和 Rails 中,我在我的模型中使用了一个直通表来存储一个位置/顺序整数,表示本文的媒体是按此顺序排列的。该表将包含这些列:

article_id, media_id, position

似乎在 Core Data 中不可能有带有自定义字段的直通表?

最佳答案

我会删除多对多关系,而是创建第三个实体,比如 Reference,它实现与“通过表”相同的目的。建立ArticleReferenceMediaReference的一对多关系,添加一个位置属性:

enter image description here

这几乎完全反射(reflect)了您的 Django/Rails 解决方案,尽管它确实需要您维护 Referencesposition 属性 - 如果您从文章中删除引用,您需要更新文章中所有剩余引用的 position 属性。

或者,...

另一种解决方案是保持多对多关系,但在数据模型中指定从文章到媒体的关系是有序的:

enter image description here

如果您检查底层的 SQLite 文件,您会发现它创建了一个中间表,其中包含一个附加属性来存储订单。您不能直接访问此值,CoreData 会在您向文章的 media 关系中插入和删除对象时更新它。

关于ios - 核心数据通过带有自定义字段的表实现多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37888284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com