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

时间:2012-09-30 06:49:46

标签: doctrine doctrine-orm

我需要获取Doctrine 2 Entity的数组表示。我找到了这个库 在线,我正在使用这个课程:

https://github.com/borisguery/bgylibrary/blob/master/library/Bgy/Doctrine/EntitySerializer.php

问题在于班级运作良好,但问题在于实体的每个属性 这是与另一个实体的关系(多对一)在每个字段上的值为null 结果数组。

一个真实的例子:

我有实体人员:

<?php

命名空间实体;

/ **  * @Entity(repositoryClass =“Repositories \ PersonRepository”)  * / 班级人员 {

/**
 * @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;

我有一个人物对象存储在db上的性别(id-&gt; 1和name-&gt; Male)。 当我使用这个类将该person对象转换为数组时,我得到了这个结果:

“id”:“1”,    “名字”:“lh”,    “中间名字”: ””,    “姓氏”:“kbkjbkl”,    “dob”:{       “日期”:“1982-05-25 00:00:00”,       “timezone_type”:3,       “timezone”:“America / New_York”    },    “home_phone_number”:“8798798”,    “work_phone_number”:“987987”,    “cell_phone_number”:“987987”,    “ssn”:“98798”,    “email”:“kjhlkjlk”,    “性别”:{       “id”:null,       “name”:null    },    “种族”:{       “id”:null,       “name”:null    },    “地址”: {       “id”:null,       “address_line1”:null,       “address_line2”:null,       “city”:null,       “zip”:null,       “state”:null    },    “婚姻状况”: {       “id”:null,       “name”:null    }

请注意突出显示的性别值(包含空值)。当它应该有1和男性。

我真的很感激任何帮助。

2 个答案:

答案 0 :(得分:2)

在反序列化过程中,您可能还会丢失一些信息,因为您的级联选项仅在分离时出现。为了确保信息在反序列化时返回实体,请添加合并 - cascade = {“detach”,“merge”}。 或者使用 - cascade = {“all”} 供参考:8.6。传递持久性/级联操作 上 : Doctrine documentation

答案 1 :(得分:0)

我明白了。问题是当doctrine从db加载实体时,除非您访问它,否则不会加载关系。在您访问其中一个关系时,然后doctrine执行查询并获取信息。在我的情况下,所有关系都为null,因为从未被访问过。这种加载方法在学说中被称为延迟加载。