如何基于动态变量在Doctrine中建立动态关联?

时间:2012-04-27 08:48:53

标签: php oop zend-framework doctrine-orm

我对doctrine2很新。我需要建立这样的连接:

Tag已连接(抽象)资源。 (摘要)资源有标签。

我想基于代码以实际形式输入Entity资源的对象。所以这样我就可以将标签附加到任何实现给定接口的实体。

我在学说中使用Zend Framework和注释docblock样式。

另一个例子是“消息”实体在系统中重复文本消息,它有作者和收件人关联,但我想根据作者和收件人为它们设置不同的目标。例如,管理实体向用户实体发送消息,或者用户实体向VipUser实体发送消息。

2 个答案:

答案 0 :(得分: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
}

您可以在您需要的任何其他实体上扩展“标记”实体。请记住更新它的鉴别器映射值。

答案 1 :(得分:1)

查看此doctrine2扩展名:

https://github.com/FabienPennequin/DoctrineExtensions-Taggable

我相信这会做你想要的。