Symfony2和Doctrine:复杂的关系

时间:2013-11-06 08:19:05

标签: symfony doctrine-orm

在我的项目中,我有实体NewsArticlesComments。 用户可以为文章和新闻添加评论。每个用户可以为每篇文章或新文章添加一些评论。 我希望单个Comments实体具有复合键,用于与NewsArticles的关系,如

subj_type(新闻或文章)+ subj_id(新文章或文章ID)

我可以通过这种方式组织关系吗?或者我必须组织两个不同的评论实体(例如NewsCommentsArticlesComments)?

1 个答案:

答案 0 :(得分:1)

您可以使用继承映射并使用单表继承来组织三个实体 - Comments,NewsComments和ArticleComments:

/**
 * @Entity
 * @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(name="type", type="string")
 * @DiscriminatorMap({"news" = "NewsComments", "article" = "ArticleComments"})
 */
class Comments
{
    protected $type;
    protected $doc_id;
    // ...
}

/**
 * @Entity
 */
class News extends ArticleComments
{
    // ...
}

/**
 * @Entity
 */
class News extends NewsComments
{
    // ...
}

NewsComments和ArticleComments实体将包含(例如)doc_id。在doc_id中,您将存储新闻或文章ID。 您何时可以通过NewsComments存储库获取新闻评论,您将获得仅针对新闻的评论。

Doctrine Inheritance Mapping