Доктрина: переопределить аннотацию наследования OneToOne для одной таблицы - PullRequest
0 голосов
/ 01 марта 2019

У меня есть два следующих объекта Doctrine, в которых TestInheritanceChild расширяет TestInheritanceParent, и они оба являются частью одного наследования таблицы:

/**
 * @ORM\Entity()
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="reference_type", type="string")
 * @ORM\DiscriminatorMap({
 *      "disc1" = "TestInheritanceParent",
 *      "disc2" = "TestInheritanceChild"
 * })
 */
class TestInheritanceParent
{    
    /**
     * @var
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(name="id", type="integer")
     */
    protected $id;

    /**
     * @ORM\OneToOne(targetEntity="ReferenceOne")
     * @ORM\JoinColumn(name="reference_id", referencedColumnName="reference_one_id")
     */
    protected $reference;
}

/**
 * @ORM\Entity()
 */
class TestInheritanceChild
    extends TestInheritanceParent
{
    /**
     * @ORM\OneToOne(targetEntity="ReferenceTwo")
     * @ORM\JoinColumn(name="reference_id", referencedColumnName="reference_two_id")
     */
    protected $reference;
}

Я хочу переопределить однозначную ассоциацию в моем дочернем классе,так что свойство ссылки объекта типа InheritanceTestParent связано с сущностью ReferenceOne, а свойство ссылки объекта типа InheritanceTestChild связано с сущностью ReferenceTwo.Однако, если я взгляну на метаданные, я получу следующее сопоставление ассоциации для ОБА родительской и дочерней сущности:

array:1 [
    "reference" => array:19 [
        "fieldName" => "reference"
        "targetEntity" => "ReferenceOne"
        "joinColumns" => array:1 [
            0 => array:6 [
                "name" => "reference_id"
                "unique" => false
                "nullable" => true
                "onDelete" => null
                "columnDefinition" => null
                "referencedColumnName" => "reference_one_id"
            ]
        ]
        "mappedBy" => null
        "inversedBy" => null
        "cascade" => []
        "orphanRemoval" => false
        "fetch" => 2
        "type" => 1
        "isOwningSide" => true
        "sourceEntity" => "TestInheritanceParent"
        "isCascadeRemove" => false
        "isCascadePersist" => false
        "isCascadeRefresh" => false
        "isCascadeMerge" => false
        "isCascadeDetach" => false
        "sourceToTargetKeyColumns" => array:1 [
            "reference_id" => "reference_one_id"
        ]
        "joinColumnFieldNames" => array:1 [
            "reference_id" => "reference_id"
        ]
        "targetToSourceKeyColumns" => array:1 [
            "reference_one_id" => "reference_id"
        ]
    ]
]

Мой вопрос таков: как можно перезаписать родительскую аннотацию вдочерняя сущность?Я уже пробовал с аннотацией @ORM \ AssociationOverride, которая тоже не работала.

Есть идеи?

В настоящее время я пользуюсь Doctrine 2.6 ...

...