Я просто пропустил аннотацию DiscriminatorMap
, и Doctrine автоматически использовало имя класса щита в качестве дискриминатора:
/**
* @ORM\Entity()
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type", type="string")
*/
abstract class AbstractContent
{
/**
* @var integer
*
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
}
/**
* @ORM\Entity()
*/
class Page extends AbstractContent
{
}
Теперь, когда я создаю новую Page()
Doctrine, создается AbstractContent
иPage
с FK для AbstractContent
и для атрибута AbstractContent
'type
равным page
.
Это идеально, поскольку позволяет генерировать столько подклассов, сколько вам нужно, даже в другихСвязки без вашего суперкласса (в моем случае AbstractContent
) не нужно знать о них.
Но имейте в виду, что пока это официально не задокументировано.Протестировано с Doctrine ORM 2.3.