Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌套的嵌入对象不正确地转换为null(Doctrine2,php)_Php_Doctrine Orm_Null_Hydration - Fatal编程技术网

嵌套的嵌入对象不正确地转换为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;   
}