选择什么样的学说继承?

时间:2015-04-09 14:39:04

标签: php symfony inheritance doctrine-orm concrete-inheritance

我无法确定什么样的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注释,但后来我找不到访问子类的方法。对于这个特例,这是最好的学说继承吗?具体表继承是更好的选择吗?我甚至不知道具体的继承是否可行,因为文档中没有详细说明。

0 个答案:

没有答案