如何让Doctrine 2返回实体而不是代理

时间:2011-05-29 16:40:18

标签: doctrine-orm deep-copy

我正在尝试使用Doctrine 2实现深层复制功能,除了我的一个实体上的一个方法尝试在返回集合之前从关联中删除某些记录之外,我几乎拥有它。

问题是,当我调用下面的getRoofAreas()时,我得到一个Proxy对象数组,我的深层复制代码不喜欢这样:

/**
 * @OneToMany(targetEntity="\Entities\QuotingRoofAreas", mappedBy="customerId", cascade={"persist"})
 * @OrderBy({"areaIndex" = "ASC"})
 */

private $roofAreas;

public function getRoofAreas() {
    $em = \Zend_Registry::get('em');
    $q = $em->createQuery("select ra from \Entities\QuotingRoofAreas ra where ra.dateDeleted IS NULL and ra.customerId = " . $this->getId());
    return $q->getResult();
}

但如果我要将其更改为:

/**
 * @OneToMany(targetEntity="\Entities\QuotingRoofAreas", mappedBy="customerId", cascade={"persist"})
 * @OrderBy({"areaIndex" = "ASC"})
 */

private $roofAreas;

public function getRoofAreas() {
    return $roofAreas;
}

然后它将返回一个持久集合,当迭代通过时,它将获得我的实体对象,这就是我想要的。后一种方法不会删除已删除的屋顶区域,这对我的用例来说是必须的。

有没有办法获取Proxy对象的Entity对象?

提前感谢任何人提供的任何帮助

1 个答案:

答案 0 :(得分:0)