0

我无法确定哪种 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
}

但是现在我想使用一个抽象类“软件”,我的所有软件都将从中继承,并且在我的 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;
}


我试图@ORM\SuperMappedClass在我的 Software 类上添加注释,但后来我没有找到访问子类的方法。对于这种特殊情况,这是最好的学说继承吗?具体表继承会是更好的选择吗?我什至不知道具体继承是否可能,因为文档中没有详细说明。

4

0 回答 0