Doctrine 条令类EntitySerializer在每个实体关系上返回null

Doctrine 条令类EntitySerializer在每个实体关系上返回null,doctrine,doctrine-orm,Doctrine,Doctrine Orm,我需要得到Doctrine 2实体的数组表示。我找到了这个图书馆 在线,我正为此目的使用此课程: 问题是类工作得很好,但问题是实体的每个属性 这是与另一个实体(多对一)的关系,该实体上的每个字段的值都为null 结果数组 一个真实的例子: 我有实体人: <?php 我在数据库中存储了一个person对象,其性别为(id->1和name->Male)。 当我使用该类将person对象转换为array时,得到了以下结果: “id”:“1”, “名字”:“lh”, “中间名”:“, “姓氏”

我需要得到Doctrine 2实体的数组表示。我找到了这个图书馆 在线,我正为此目的使用此课程:

问题是类工作得很好,但问题是实体的每个属性 这是与另一个实体(多对一)的关系,该实体上的每个字段的值都为null 结果数组

一个真实的例子:

我有实体人:

<?php
我在数据库中存储了一个person对象,其性别为(id->1和name->Male)。 当我使用该类将person对象转换为array时,得到了以下结果:

“id”:“1”, “名字”:“lh”, “中间名”:“, “姓氏”:“kbkjbkl”, “dob”:{ “日期”:“1982-05-25 00:00:00”, “时区类型”:3, “时区”:“美国/纽约” }, “家庭电话号码”:“8798798”, “工作电话号码”:“987987”, “手机号码”:“987987”, “ssn”:“98798”, “电子邮件”:“kjhlkjlk”, “性别”:{ “id”:空, “名称”:空 }, “种族”:{ “id”:空, “名称”:空 }, “地址”:{ “id”:空, “地址_行1”:空, “地址_行2”:空, “城市”:空, “zip”:空, “状态”:空 }, “婚姻状况”:{ “id”:空, “名称”:空 }

请注意高亮显示的性别值(具有空值)。当它应该有1和男性


我将非常感谢您的帮助。

我收到了。问题是,当条令从db加载实体时,除非您访问它,否则不会加载关系。在访问其中一个关系时,doctrine执行查询并获取信息。在我的例子中,所有关系都为null,因为它们从未被访问过。这种加载方法在条令中称为延迟加载

在反序列化过程中也可能会丢失一些信息,因为您的级联选项仅在detach上。为了确保反序列化时信息返回到实体中,您应该添加merge-cascade={“detach”,“merge”}。 或者使用-cascade={“all”} 参考见:8.6。可传递持久性/级联操作 关于:

我明白了。问题是,当条令从db加载实体时,除非您访问它,否则不会加载关系。在访问其中一个关系时,doctrine执行查询并获取信息。在我的例子中,所有关系都为null,因为它们从未被访问过。这种加载方法在条令中称为延迟加载。创建自己的答案并接受它。这样,你的问题就不会没有答案了。您已经创建了两个问题,在创建后不到20分钟就可以回答。也许你应该在这里发布之前多搜索一点您可以强制它完全加载实体及其关系。
/**
 * @Id @GeneratedValue
 * @Column(type="bigint")
 * @var integer
 */
protected $id;

/**
 * @Column(type="string", length=32)
 * @var string
 */
protected $firstname;

/**
 * @Column(type="string", length=32, nullable="true")
 * @var string
 */

 /**
 * @ManyToOne(targetEntity="Gender", cascade={"detach"})
 * @JoinColumn(name="gender", referencedColumnName="id")
 */
protected $gender;