Какое учение по наследству выбрать?
Мне трудно решить, какое наследование Доктрины подходит для моего проекта.
Цель состоит в том, чтобы виртуальная машина (ВМ) имела несколько программ (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. Таким образом, в будущем будет проще добавить новый класс программного обеспечения, унаследованного от Software.
Мой абстрактный класс "Программное обеспечение" связан с классом виртуальной машины (ВМ):
/**
* 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
аннотации к моему классу программного обеспечения, но тогда я не нашел способа получить доступ к дочерним классам. Это лучшее наследство доктрины для этого конкретного случая? Будет ли конкретное наследование таблицы лучшим выбором? Я даже не знаю, возможно ли конкретное наследование, так как оно не описано в документе.