2012-04-27 7 views
2

Im doctrine2にはかなり新しいです。私はこのような接続をする必要があります:動的変数に基づいてDoctrineで動的関連付けを行う方法は?

タグは(抽象)リソースが接続されています。 (要約)リソースにはタグがあります。

コードに基づいてエンティティリソースのオブジェクトを入力したいと思います。このようにして、与えられたインタフェースを実装するエンティティにタグを付けることができます。

私はDoctrineでZend Frameworkと注釈のdocblockスタイルを使用しています。

もう1つの例は、システム内のテキストメッセージと、著者と受信者の関連付けを持つRepesentsを持つ「Message」エンティティですが、作成者と受信者に応じて異なるターゲットが必要です。例えば、Admin EntityはUser Entityにメッセージを送信し、User EntityはVipUser Entityにメッセージを送信します。

答えて

2

Class Table Inheritanceのようなサウンドは、このための完璧なソリューションです。

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html#class-table-inheritance

あなたは、本質的に、あなたの親クラス(タグ)を作成し、その子のそれぞれについて、弁別マップを提供する必要があります。ですから、例えば..

/** 
* @Entity 
* @InheritanceType("JOINED") 
* @DiscriminatorColumn(name="discr", type="string") 
* @DiscriminatorMap({"tag" = "Tag", "message" = "Message", "otherentity" = "OtherEntity"}) 
*/ 
class Tag 
{ 
    // tag properties/definitions etc 
} 

/** @Entity */ 
class Message extends Tag 
{ 
    // Message specific stuff 
} 

あなたが必要な任意の他のエンティティであなたの「タグ」の実体を拡張することができます。あなたのdiscriminatorのマップ値を更新するのを忘れないでください。

+0

これは良い考えのようです。これに関しては、ドキュメントは非常に貧弱です。メッセージエンティティを特定のタイプの抽象的なユーザーエンティティ(たとえば、ユーザーはAdminエンティティ、VIPエンティティ、およびStandardUserエンティティ)に接続できますか?はいの場合、これはそれです! :-) –

+0

できます。しかし、個人的には私は役割を使用します。役割ManyToOneユーザー、メッセージManyToOneユーザー。 –

関連する問題