Symfony2 在帖子和评论之间的博客关系学说

Symfony2 which doctrine relationship for blog between posts and comments

我正在用 symfony2 建立一个博客,我想知道应该使用哪种原则关系映射来进行评论。问题是我想在不同的部分使用评论,比如评论图片(不是 posts)或评论评论。所以我需要我的评论实体独立于 post.

我想尝试 OneToMany 单向,但它在 post 上强制使用唯一键,这不是很好。

感谢您的帮助

您可能想看看 Single Table Inheritance。免责声明:我没有这方面的直接经验,但经常有人建议将其作为类似问题的答案。

简单的方法

最简单的方法是为每个链接的实体创建一个 OneToMany 关系。它非常丑陋,在搜索实体时可能无效,但它有效。

映射类似于:

class Comment
{
    /**
     * @ORM\ManyToOne(targetEntity="Post")
     * @ORM\JoinColumn(nullable=true)
     **/
    protected $post;

    /**
     * @ORM\ManyToOne(targetEntity="Picture")
     * @ORM\JoinColumn(nullable=true)
     **/
    protected $picture;

    /**
     * @ORM\ManyToOne(targetEntity="Comment")
     * @ORM\JoinColumn(nullable=true)
     **/
    protected $comment;
}

您必须自己处理安全问题,以确保评论至少有一个链接元素,搜索可能会更难,但这是一种基本的方法。

复杂的方式

最有效的方法(但可能是最复杂的)是创建一个 "discriminant" 属性 和一个 "element-to-be-commented" 属性,再加上Custom Doctrine hydrator 一次检索所有对象,但每个对象都是正确的实体。

"element-to-be-commented" 属性 将是评论、图片或 Post,判别式将在此处判断链接了哪个 class。

在SQL术语中,表示表之间没有外键,element_id依赖于判别式.