我有一个类如下:
/** @Entity **/
class orgGroup{
//id and stuff...
/**
* @Column(type="string")
**/
private $name;
/**
* @Column(type="string", nullable=true)
**/
private $description;
/**
* @ManyToOne(targetEntity="orgGroupType", inversedBy="_orgGroups")
* @JoinColumn(name="_orgGroupType")
**/
private $_orgGroupType;
//...
}
但是当我通过我的数据库加载此对象时
$groups = $em->getRepository("orgGroup")->findAll();
我只是正确地得到了名称而不是_orgGroupType …我不知道为什么… OrgGroup是orgGroupType的所有者,它只是一个对象而不是数组.我的Web服务总是说:
{"error":[],"warning":[],"message":[],"data":[{"name":"AdministratorGroup","description":null,"_orgGroupType":{"__ isInitialized __":false}}]}
结果是:
"name":"AdministratorGroup",
"description":null,
"_orgGroupType":{"__ isInitialized __":false}
但应该是:
"name":"AdministratorGroup",
"description":"some description",
"_orgGroupType":{name:"test"}
所以有2个错误……我不明白为什么. 所有数据都在数据库中正确设置.
有任何想法吗?
编辑: 这是我的orgGroupType -entity缺失的代码
/** @Entity **/
class orgGroupType {
/**
* @OneToMany(targetEntity="orgGroup", mappedBy="_orgGroupType")
**/
private $_orgGroups;
public function __construct()
{
$this->_orgGroups = new ArrayCollection();
}
}
解决方法: 这看起来像是一个懒惰加载问题.如何将对象中的数据导入Webservice答案?
如果你没有配置别的东西,Doctrine2是延迟加载的,这意味着你的$groups = $em-> getRepository(“orgGroup”) – > findAll();不会返回真正的orgGroup对象,而是返回Proxy对象(Doctrine Documentation).
这意味着$group对象将不会有它的描述或orgGroupType值,直到你调用$group-> getDescription()或$group-> getOrgGroupType()(然后Doctrine自动加载它们),所以你需要这样做之前将数据写入Web服务的JSON响应中.如果以某种方式在不使用getter方法的情况下遍历对象属性,它将无法工作.
我希望那是问题:) (编辑:北几岛)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|