0

我正在建立一个社交网站,我正在制定提要的工作方式。我想在这里使用答案:如何在社交网络中实现活动流并实现提到的数据库设计:

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_idbased off activity_type。如果用户注册,我希望成为source_id注册的用户。如果有人创建了一个组,source_id则该组将是该组。我知道我可以只使用没有密钥的简单 ID 我只是想知道 Symfony 是否有某种内置方法可以做到这一点。

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

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

如果source_type是“user_post”:

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

我基本上只是想找到存储这些数据并使其最快的最佳方式。

4

1 回答 1

2

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

但是,关键字是表继承

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

我认为您可以通过执行以下操作来实现目标:

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

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

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

于 2013-11-13T20:47:10.373 回答