Как заставить Doctrine 2 возвращать объект вместо прокси-сервера

#doctrine-orm #deep-copy

#doctrine-orm #глубокое копирование

Вопрос:

Я пытаюсь реализовать функциональность глубокого копирования, используя Doctrine 2, и у меня почти получилось, за исключением метода в одной из моих сущностей, который пытается удалить определенные записи из ассоциации перед возвратом коллекции.

Проблема в том, что когда я вызываю getRoofAreas() ниже, я получаю массив прокси-объектов, которые не нравятся моему коду глубокого копирования:

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

private $roofAreas;

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

но если бы я изменил это на:

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

private $roofAreas;

public function getRoofAreas() {
    return $roofAreas;
}
  

тогда он вернул бы постоянную коллекцию, которая при повторении получила бы объекты Entity, что мне и нужно. Последний подход не удаляет удаленные области крыши, что является обязательным для моего варианта использования.

Есть ли способ получить объект Entity для прокси-объекта?

Заранее спасибо за любую помощь, которую кто-либо может предоставить

Комментарии:

1. Вы пробовали запрос::HYDRATE_OBJECT?

2. $query = $em->CreateQuery(‘ВЫБЕРИТЕ u Из CmsUser u’); $users = $query->GetResult(Запрос::HYDRATE_OBJECT);

Ответ №1:

Измените свой метод результатов

 return $q->getArrayResult();
  

http://www.doctrine-project.org/docs/orm/2.0/en/reference/dql-doctrine-query-language.html#array-hydration