我正在使用symfony2构建博客,我想知道应该将哪个学说关系映射用于评论。问题是我想在不同的部分使用评论,比如评论图片(不是帖子)或评论评论。所以我需要我的评论实体独立于帖子。
我想尝试OneToMany unidirectionnal,但它会在帖子上强制使用一个不太好的密钥。
感谢您的帮助
答案 0 :(得分:2)
最简单的方法是为每个链接的实体创建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;
}
您必须自己处理安全问题,以确保评论至少包含一个链接元素,搜索可能会更难,但这是一种基本的方法。
最有效的方法(但可能是最复杂的)就是创造一个“判别式”"属性和待评论元素"属性,加上Custom Doctrine hydrator一次检索所有对象,但每个对象都是正确的实体。
"要评论的元素"然后,属性将是评论,图片或帖子,并且判别将在这里告诉哪个类被链接。
在SQL术语中,表示表之间没有外键, element_id 依赖于判别。
答案 1 :(得分:0)
您可能需要查看Single Table Inheritance。免责声明:我没有直接经验,但经常被建议作为类似问题的答案。