2014-11-02 49 views
0

我需要在我的项目中有一个实体具有两种语义类型; 假设Post实体可以是两种类型的帖子:“文字”帖子&“链接”帖子。
所以我的文章实体是这样的:在symfony2中有两个语义类型的实体

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

    ... 
} 

现在一个帖子只能具有基于typetextlink领域之一,其他的应该是Null
我如何能实现这样的事情Symfony2/Doctrine/Forms?
我应该将它分成两个实体还是symfony可以管理这种情况?

回答

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; 
} 
相关问题