Symfony 3 with Doctrine。
我有一个名为“MainBundle”的Bundle,存在于多个Symfony项目(P1,P2和P3)中。 MainBundle包含不同的实体,例如“AbstractColor.php”。
/*** AbstractColor.php ***/
/**
* @ORM\Entity
* @ORM\Table(name="color")
*/
class AbstractColor
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", length=7)
*/
protected $code;
/* ... getter and setter ... */
}
我想在P1,P2和P3中使用颜色实体,但在P3中我想添加一个新字段“name”。为此,我在P3“Color.php”中创建了一个新实体:
/*** Color.php ***/
/**
* @ORM\Entity
* @ORM\Table(name="color")
*/
class Color extends \MainBundle\AbstractColor
{
/**
* @ORM\Column(type="string", length=100)
*/
protected $name;
/* ... getter and setter ... */
}
P3文件结构:
我的问题
上面的代码不起作用,因为我多次定义表“color”。我也尝试了“Mapped Superclass”的学说,但后来我不能使用OneToMany关联。
有解决问题的好方法吗?谢谢!
答案 0 :(得分:1)
使用单表继承而不是MappedSuperclass,请在此处查看文档:{{3}}
基本上,将注释更改为AbstractColor:
/**
* @Entity
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="type", type="string")
* @DiscriminatorMap({"AbstractColor" = "AbstractColor", "Color" = "Color"})
*/
class AbstractColor
这样,表格不会干扰,你会有一个列"类型"在你的桌子上"颜色"这将允许Doctrine知道实体是否是AbstractColor或Color的实例。
哦,顺便说一句,你的类AbstractColor根本就不是抽象的,起初非常令人不安。您可能想要重命名它或使其抽象化。 :)