Symfony2与字段的动态关系

时间:2013-11-13 19:56:09

标签: symfony dynamic types field

我正在建立一个社交网站,我正在制定饲料如何运作。我想在这里使用答案:How to implement the activity stream in a social network并实现所提到的数据库设计:

id             
user_id       (int)
activity_type (tinyint)
source_id     (int)  
parent_id     (int)
parent_type   (tinyint)
time          (datetime but a smaller type like int would be better) 

问题是我不知道如何根据source_id映射activity_type。如果用户注册,我希望source_id是注册的用户。如果有人创建了一个组,则source_id将成为该组。我知道我可以只使用没有键的简单ID我只是想知道Symfony是否有某种方法可以做到这一点。

如果我获取Feed并且activity_type是user_register,我希望能够在不运行其他查询的情况下获取源(用户):

$feedEntity->getSource()->getUsername(); //getSource() being the User entity

如果source_type是“user_post”:

$feedEntity->getSource()->getMessage(); //getSource() being the UserPost entity

我基本上只想找到存储这些数据的最佳方法,并使其成为最快的。

1 个答案:

答案 0 :(得分:2)

不容易处理学说,我认为它不能100%自动实现

但是,关键字是表继承

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

我认为你可以通过这样的方式实现你的目标:

  • 您可以通过表的类型列创建一个鉴别器映射,该表告诉doctrine将此实体加载为 UserSource (例如)

  • UserSource 可以是一个自己的实体(如果需要,可以从基类继承),您可以决定将source_id列映射到真实的用户实体

  • 您可以使用 instanceof 匹配您的鉴别器映射中映射的不同实体的命名空间来定义不同来源的不同行为