摘要:当它们包含在实体中时,Doctrine Embedded 类型无法填充,而这些实体本身又包含在另一个顶级实体中。
详细信息:我有一个顶级实体A
,它与一个中间级实体有ManyToOne
关系,而中间级实体B
又具有一个 Embedded 对象C
。
当我检索顶级实体(使用$entityManager->getRepository(A::class)->find($aid)
)时,返回的 A 对象的$b
变量将其$c
属性显式设置为 null (而不是 - 如您所料 - 完全不存在)。查询$c
属性不会导致B
水合 - 相反 $c 保持为空。
如果我首先进行虚拟调用以获得B
eg的简单属性reference
,则可以B
正确补水并正确$c
填充。
同样,如果我进入中级水平,$entityManager->getRepository(B::class)->find($bid)
那么也没有问题。
这是教义的限制吗?
(一个可能的复杂因素是 A 本身是另外两个实体的基类)
/**
* @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;
}