2017-03-14 1 views
1

まず、私が対処している状況を理想的に説明していないかもしれないので、質問タイトルのために事前にお詫びしたいと思います。私はいくつかの研究をしましたが、適切な解決策を見つける運がなかった。Doctrine2アーキテクチャの設計 - 補足データを持つエンティティ

私の場合:私は、エンティティを抱えている

、私のウェブサイト上の顧客が行う活動を表して活動を、と言います。これは、page_view、comment、login、purchaseなどのような別のタイプにすることができます。私がしようとしているのは、各アクティビティに補足データを割り当てることです。コメントアクティビティの補足データは、商品エンティティの配列などを購入するためのコメントエンティティになります。 今のところ、ActivityInterfaceでアクティビティタイプを定数として定義してから、その値を使用してEntityManagerインスタンスを取得できますhttp要求で提供されたパラメータから正しいエンティティを解決します。このソリューションには多くの欠点があり、それが正しいアプローチであるかどうかはわかりません。

あなたは私にいくつかのヒントを与えたり、その主題に噛み付く方法に関するいくつかの有用な出版物にリダイレクトしたりして、私を助けてくれますか?ありがとう。

答えて

1

私はそうのようなMapped Superclassを使用することをお勧め:

/** @MappedSuperclass */ 
class Activity 
{ 
    /** @Id @Column(type="integer") */ 
    protected $id; 

    /** @Column(type="string") */ 
    protected $generalActivityProperty; 

    // ... more fields and methods 
} 

/** @Entity */ 
class Comment extends Activity 
{ 

    /** @ManyToOne(targetEntity='CommentEntity') */ 
    private $commentEntity; 

    // ... more fields and methods 
} 

/** @Entity */ 
class Purchase extends Activity 
{ 

    /** @OneToMany(targetEntity='ProductAssociations') */ 
    private $products; 

    // ... more fields and methods 
} 

これは、それぞれが「活動」に定義されたすべてのフィールド/メソッドおよび追加のフィールドを含む(ただし、「活動」の)クラスごとに単一のテーブルを作成します。 /特定のクラスで定義されているメソッド。

すべてのアクティビティをentityManager->getRepository('Acticity')->find()で照会することもできます。コメント、PageViewなどのオブジェクトのリストを取得します。

これはテストされていませんが、その方法を知っておく必要があります。

Single Table InheritanceまたはClass Table Inheritanceを使用することもできます。それをチェックしてくださいhere

あなたのケースでは、マップされたスーパークラスが完璧であるはずです。

関連する問題