2016-06-17 19 views
1

私のオブジェクトモデルにはアーティクルとメディアがあり、アーティクルは多対多の関係でメディアを参照します。メディアは、異なる順序を有し、そのメディア自体ではなく、そのメディアに対する記事の相対的な順序を記憶する必要がある。コアデータ多対多のカスタムフィールドを持つテーブル

article_id, media_id 

コアデータ/ MagicalRecordオブジェクトが記事と媒体である:

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

class Media: NSManagedObject { 
    ... 
} 

持続するコアデータに手段があるので、

コアデータは、内部テーブルを有するSQLiteのデータベースを生成しますスルーテーブルのメカニズムのメディアの順序?代わりに、メディアが記事で使用されるたびに、独自の位置で新しいメディアレコードを作成する必要があるようです。

DjangoとRailsでは、私のモデルでは、この記事のこのメディアがこの順番であることを示す位置/順序整数を格納するためにthroughテーブルを使用しています。テーブルには次のカラムがあります。

カスタムフィールドのスルーテーブルはCore Dataでは不可能ですか?

答えて

2

私は多対多の関係を削除し、代わりに ""という3番目のエンティティを作成します。これは "スルーテーブル"と同じ目的を果たします。 ArticleからReferenceに1対多の関係を確立し、MediaからReferenceに、そしてposition属性を追加します。

enter image description here

それはpositionを維持するためにあなたを必要としないが、これはほぼ正確に、あなたのジャンゴ/ Railsのソリューションを反映Referencesの属性 - 記事から参照を削除する場合は、記事内の残りの参照についてはposition属性を更新する必要があります。また

、...

別の解決策は、多くの多の関係を維持するだろうが、メディアへの記事の関係が発注されたデータモデルで指定する:

enter image description here

基礎となるSQLiteファイルを調べると、注文を保存する追加の属性を持つ中間テーブルが作成されていることがわかります。この値に直接アクセスすることはできません。CoreDataは、記事の挿入/削除時に記事のmediaの関係を更新します。

関連する問題