在symfony2中有两个语义类型的实体

时间:2014-11-02 13:05:49

标签: php symfony doctrine-orm symfony-forms

我需要项目中的实体有两种语义类型; 假设Post实体可以是两种类型的帖子:" text"发布& "连结"帖子。
所以我的帖子实体是这样的:

Class Post{
    private $id;
    private $type;
    private $text=nul;
    private $link=null;

    ...
}

现在,帖子只能基于text字段包含linktype个字段之一,而另一个字段应为Null
如何使用Symfony2 / Doctrine / Forms实现这样的功能?
我应该将它拆分为两个实体,还是symfony可以管理这种情况?

1 个答案:

答案 0 :(得分:1)

在这种情况下,您可以使用inheritance。声明一个抽象类,其中包含LinkPostTextPost共有的属性:

@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;
}