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

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

подробности: У меня есть субъект высшего уровня 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

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]