1

我需要获取 Doctrine 2 实体的数组表示。我在网上找到了这个库,我为此目的使用这个类:

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

问题是该类运行良好,但问题是与另一个实体(多对一)相关的实体的每个属性在结果数组的每个字段上都具有 null 值。

一个真实的例子:

我有实体人:

<?php

命名空间实体;

/** * @Entity(repositoryClass="Repositories\PersonRepository") */ class Person {

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

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

“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", "gender": { "id": null, "name": null }, "race": { "id": null, "name": null }, "address": {“身份证”:空,“address_line1”:null,“address_line2”:null,“city”:null,“zip”:null,“state”:null },“marital_status”:{ “id”:null,“name”:null }

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

我将非常感谢任何帮助。

4

2 回答 2

2

您可能还会在反序列化期间丢失一些信息,因为您的级联选项仅在分离时。为了确保信息在反序列化时返回到您的实体中,您应该添加 merge - cascade = {"detach", "merge"} 。或者使用 - cascade={"all"} 参考见:8.6。传递持久性/级联操作: Doctrine 文档

于 2012-10-17T16:16:01.363 回答
0

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

于 2012-10-01T20:27:41.947 回答