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依赖于判别式.
我正在用 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依赖于判别式.