我无法确定什么样的Doctrine继承适合我的项目。
目标是虚拟机(VM)拥有多个软件(PHP,MySQL等......)。这些软件中的每一个都有一个独特的类,有些领域共同的。我首先尝试在VM类中添加与每个软件类的关系,并且它工作得很好:
/**
* Class VM
*/
class VM
{
/**
* @var \AppBundle\Entity\MySQL
*
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\MySQL", cascade={"persist"})
*
*/
private $mysql;
/**
* @var \AppBundle\Entity\PHP
*
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\PHP", cascade={"persist"})
*
*/
private $php;
...
and other softwares, always the same
}
但是现在我想使用一个抽象类'Software',我的软件将从该类继承,并且在我的VM类中只有$ software属性。通过这种方式,将来可以更轻松地添加继承自Software的新软件类。
我的抽象类'软件'链接到虚拟机(VM)类:
/**
* Class Software
*/
abstract class Software {
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="version", type="string", length=255, nullable=true)
*/
private $version;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\VM")
*/
private $VM;
}
我尝试在我的Software类上添加@ORM\SuperMappedClass
注释,但后来我找不到访问子类的方法。对于这个特例,这是最好的学说继承吗?具体表继承是更好的选择吗?我甚至不知道具体的继承是否可行,因为文档中没有详细说明。