Вложенный вложенный объект неправильно гидратируется до нуля (Doctrine2, php)

Сводка: Doctrine Внедренные типы не заполняются, когда они содержатся в сущностях, которые сами содержатся в другой сущности верхнего уровня.

Детали: у меня есть объект высшего уровня A который имеет ManyToOne отношения с субъектом промежуточного уровня Bкоторый в свою очередь имеет встроенный объект C,

Когда я получаю сущность верхнего уровня (используя $entityManager->getRepository(A::class)->find($aid)), возвращенный объект $b переменная имеет свой $c свойство явно установлено в нуль (а не - как вы могли бы ожидать - вообще отсутствует). Опрос $c собственность не вызывает B гидратировать - вместо этого $c остается нулевым.

Если я сначала введу фиктивный вызов, чтобы получить простое свойство B например reference, затем B правильно гидратирует и $c заполнен правильно.

Точно так же, если я приду на промежуточном уровне с $entityManager->getRepository(B::class)->find($bid) тогда проблем тоже нет.

Это ограничение в доктрине?

(Возможным усложняющим фактором является тот факт, что сам A является базовым классом для 2 других объектов)

/**
 * @Entity
 * @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(name="type", type="string")
 * @DiscriminatorMap({"child1" = "Child1 "child2" = "Child2"})
 * @Table(name="A")
 */
class A
{
    /**
     * @ManyToOne(targetEntity="Model\B", inversedBy="As")
     * @JoinColumn(name="b_id", referencedColumnName="id",)
     * @var B
     */
    public $b;
}

/**
 * @Entity
 * @Table(name="b")
 */
class B
{
    /**
     * @Embedded(class="Model\C", columnPrefix = false)
     * @var C
     */
    public $c;

    /**
     * @Column(type="string")
     * @var string
     */
    public $reference;
}

/**
 * @Embeddable
 */
class C
{
    /**
     * @Column(type="smallint")
     * @var int
     */
    public $type;   
}

0 ответов

Другие вопросы по тегам