我需要项目中的实体有两种语义类型;
假设Post
实体可以是两种类型的帖子:" text"发布& "连结"帖子。
所以我的帖子实体是这样的:
Class Post{
private $id;
private $type;
private $text=nul;
private $link=null;
...
}
现在,帖子只能基于text
字段包含link
或type
个字段之一,而另一个字段应为Null
如何使用Symfony2 / Doctrine / Forms实现这样的功能?
我应该将它拆分为两个实体,还是symfony可以管理这种情况?
答案 0 :(得分:1)
在这种情况下,您可以使用inheritance。声明一个抽象类,其中包含LinkPost
和TextPost
共有的属性:
@Entity
@InheritanceType("SINGLE_TABLE")
@DiscriminatorColumn(name="discriminator", type="string")
@DiscriminatorMap({"text"="TextPost", "link"="LinkPost"})
abstract class Post {
@Id @GeneratedValue @Column
private $id;
@ManyToOne(...)
private $author;
}
@Entity
class TextPost extends AbstractPost {
@Column
private $content;
}
@Entity
class LinkPost extends AbstractPost {
@Column
private $url;
}