嵌套的嵌入对象不正确地转换为null(Doctrine2,php)
摘要:当条令嵌入类型包含在实体中时,无法填充这些类型,而实体本身包含在另一个顶级实体中 详细信息:我有一个顶级实体嵌套的嵌入对象不正确地转换为null(Doctrine2,php),php,doctrine-orm,null,hydration,Php,Doctrine Orm,Null,Hydration,摘要:当条令嵌入类型包含在实体中时,无法填充这些类型,而实体本身包含在另一个顶级实体中 详细信息:我有一个顶级实体a,它与一个中级实体B有一个C的关系 当我检索顶级实体(使用$entityManager->getRepository(A::class)->find($aid))时,返回的对象的$b变量将其$c属性显式设置为null(而不是如您所料完全不存在)。查询$c属性不会导致B变为空 如果我首先在中放入一个伪调用以获取B的简单属性,例如reference,那么B将正确地生成,并且$c被正确地
a
,它与一个中级实体B
有一个C
的关系
当我检索顶级实体(使用$entityManager->getRepository(A::class)->find($aid)
)时,返回的对象的$b
变量将其$c
属性显式设置为null(而不是如您所料完全不存在)。查询$c
属性不会导致B
变为空
如果我首先在中放入一个伪调用以获取B
的简单属性,例如reference
,那么B
将正确地生成,并且$c
被正确地填充
类似地,如果我在中间级别使用$entityManager->getRepository(B::class)->find($bid)
,那么也没有问题
这是教义上的限制吗
(一个可能的复杂因素是A本身是另外两个实体的基类)
只有当您访问其他类中的某个类中的数据时,条令才会对其他类进行补充。它应该阻止它因为不必要的关系而获取数据。所以它只在你试图访问其他属性的时候才会发生classes@RiggsFolly关键是当我试图进入嵌入的房地产时,它没有水合作用,然后我将解释:)@HaddenUff该问题可能与您正在使用属性的
public
可见性以及Proxy
初始化可嵌入字段时可能存在一些问题有关。我会尝试查看private
属性是否存在问题。如果成功的话,最好提交一份bug报告。点击@malarzm。更改public$c代码>至私人$c代码>并提供访问器可避免错误。非常感谢你的帮助,我会按照你的建议提交一份bug报告
/**
* @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;
}