2011-10-10 5 views
7

私はブログアプリケーションを持っているとしましょう。
著者は、ウェブ上の既存の画像のURLへのリンクを付けるか、新しい画像をアップロードすることで、複数の画像を投稿に追加できます。doctrine 2で複雑なエンティティの関連付けクエリを実行するにはどうすればよいですか? (仮想エンティティ)

画像(アップロードされたURLまたはURL)からその画像を使用するすべての投稿に、特定の投稿からその投稿内のすべての画像(たとえば、削除する可能性があります)違法な画像や投稿者が投稿を修正するまでそれらを使用する投稿を中断する)。

しかし、私はアップロードされたイメージとURLイメージのために異なるエンティティを使用します - アップロードされたイメージは、URLイメージよりイメージに関するより多くのデータを持っています。

編集された投稿を保存するたびに、より複雑なコードになります。特定の画像(実行する必要がある投稿のすべての画像)を確認し、作成または更新する必要がありますレコードを作成し、ポストエンティティの関係フィールドに割り当てます。

だから... ...私はUploadedImageUrlImageエンティティを持っていると仮定すると、私はそれをアップロードまたはURLがあれば、それを取得各画像ごとにチェックしpostエンティティにsetImages方法を持っていることについて考え、その後、setUploadedImagesかのいずれかを呼び出しますsetUrlImages

しかし、同じ方法でイメージをロードするには、ある種の仮想リポジトリimagesが必要になります。

それは少し複雑に聞こえる、と私は疑問に思っ:

  1. どのように私は(そのリポジトリとすべてで)仮想教義実体を持つことができますか?
  2. 良いデザインはありますか?
+3

[継承マッピング](http://www.doctrine-project.org/docs/orm/2.1/ja/reference/inheritance-mapping.html)の使用を検討しましたか? – Orbling

+0

@Orblingどのように?そして、それはどのように各タイプで何をすべきかを決める "問題"を解決するでしょうか? – Doron

+0

まあ、継承マッピングを使用すると、両方の型を表すスーパークラスを持つことができます。そして、それらを一緒に扱うことができます。彼らはサブタイプに応じて同じ方法を持ち、異なることをすることができます。 – Orbling

答えて

2

ここで何をしようとするためのドキュメントです:
http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html

それはクラスのテーブル継承対単一テーブル継承について説明します。 あなたのケースは後者のケースに適していますが、単一のテーブル継承にも移行することを検討してください。

これらのイメージの(コード)ユーザーが起点に関係なく同じものを扱う場合、追加されたクエリの複雑さとデータベースの使用は、正規化に値するものではありません。

関連する問題