与文章或产品相关的评论实体

时间:2015-07-08 11:51:03

标签: symfony doctrine-orm entity relationship

我有实体“文章”和“产品”。现在我想为这两个实体添加注释。我应该创建具有相同属性的2个不同实体“ArticleComment”和“ProductComment”,并为其各自的实体构建ManyToOne关系,或者创建单个“Comment”实体并找到一种方法来构建与“Article”和“产品”实体。考虑到解决方案#2,我该怎么做?

1 个答案:

答案 0 :(得分:2)

  

考虑到解决方案#2,我该怎么做?

一种方法是使用Single Table Inheritance

  

单表继承是一种继承映射策略,其中层次结构的所有类都映射到单个数据库表。为了区分哪一行代表层次结构中的哪种类型,使用了所谓的鉴别器列。

这意味着您可以轻松创建两个单独的实体ArticleCommentProductComment,同时扩展Comment。然后使用DiscriminatorMap列提供的优势。

您的Comment实体可以拥有一个名为parent的关系,例如可以引用您的ArticleProduct实体。通过创建ArticleCommentProductComment的新实例,您的鉴别器地图字段将根据您使用的类型自动填充。

这也可以让您使用DQL按类型查询相关评论。文档示例:

$query = $em->createQuery('SELECT u FROM Doctrine\Tests\Models\Company\CompanyPerson u WHERE u INSTANCE OF Doctrine\Tests\Models\Company\CompanyEmployee');

还有更多。您可以阅读该章here。当然,这只是一个示例,您可以使用完全不同的方法。