Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在symfony2中具有两种语义类型的实体_Php_Symfony_Doctrine Orm_Symfony Forms - Fatal编程技术网

Php 在symfony2中具有两种语义类型的实体

Php 在symfony2中具有两种语义类型的实体,php,symfony,doctrine-orm,symfony-forms,Php,Symfony,Doctrine Orm,Symfony Forms,我需要在我的项目中有两种语义类型的实体; 假设Post实体可以是两种类型的Post:“文本”Post和“链接”Post。 所以我的post实体是这样的: Class Post{ private $id; private $type; private $text=nul; private $link=null; ... } 现在,根据类型字段,一篇文章只能有一个文本或链接字段,另一个字段应为空 我如何使用Symfony2/条令/表格实现这样的事情? 我应

我需要在我的项目中有两种语义类型的实体; 假设
Post
实体可以是两种类型的Post:“文本”Post和“链接”Post。
所以我的post实体是这样的:

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

    ...
}
现在,根据
类型
字段,一篇文章只能有一个
文本
链接
字段,另一个字段应为

我如何使用Symfony2/条令/表格实现这样的事情?
我应该将其拆分为两个实体,还是symfony可以处理这种情况?

您可以在这种情况下使用。使用
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;
}