我需要获取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和男性。
我真的很感激任何帮助。
答案 0 :(得分:2)
在反序列化过程中,您可能还会丢失一些信息,因为您的级联选项仅在分离时出现。为了确保信息在反序列化时返回实体,请添加合并 - cascade = {“detach”,“merge”}。 或者使用 - cascade = {“all”} 供参考:8.6。传递持久性/级联操作 上 : Doctrine documentation
答案 1 :(得分:0)
我明白了。问题是当doctrine从db加载实体时,除非您访问它,否则不会加载关系。在您访问其中一个关系时,然后doctrine执行查询并获取信息。在我的情况下,所有关系都为null,因为从未被访问过。这种加载方法在学说中被称为延迟加载。