2011-11-25 3 views
10
$shops = $this->em->getRepository('models\Shop')->findAll(); 

엔티티로 배열을 지정하지만 배열로 엔티티가 필요합니다.쿼리 결과를 배열 배열로 변환

엔티티를 배열로 변환하는 방법은 무엇입니까?

+0

* 엔티티로서의 엔티티 * 엔티티는 어떻게 보이고 배열은 어떻게 생겼을까요? – hakre

답변

12

나는 동일한 문제가있었습니다. return get_object_vars($this)도 내부의 교리 객체/속성을 변환하기 때문에 좋은 해결책이 아닙니다. 일부 연구에서이 클래스를 발견했습니다 : EntitySerializer 엔티티에서 깨끗한 배열이나 JSON을 만들고 불필요한 항목을 제거합니다. 문서는 here입니다. 예를 들어 다음 코드를

$patientProfile = $this->em->getRepository('Entities\Patientprofile')->findOneByuserid('2222222'); 
$entitySerializer=new Bgy\Doctrine\EntitySerializer($this->em); 
$patientProfile=$entitySerializer->toArray($patientProfile); 
+0

젠드 프레임 워크 2에 어떻게 설치하나요? 멍청이처럼 설명 할 수 있니? :) – Arvangen

+0

이것이 가장 잘 알려진 방법입니다. 잘 했어! – manix

16

교리가하자 쿼리를 실행할 때 당신은 당신이 반환되는 결과의 데이터 유형을 변경 수화 모드를 지정할 수 있습니다. 이 경우 Query :: HYDRATE_ARRAY가 필요합니다. 리포지토리에있는 기본 findAll() 메서드에서 지정하지 않습니다. 자신의 DQL을 작성해야합니다.

당신이 배열로 entites의 모음이 필요한 경우 : 당신은 예를 들어 배열로 하나의 엔티티가 필요한 경우

$query = $em->createQuery('SELECT u FROM User u'); 
$entites = $query->execute(array(), Query::HYDRATE_ARRAY); 

// If you don't have parameters in the query, you can use the getResult() shortcut 
$query = $em->createQuery('SELECT u FROM User u'); 
$entities = $query->getResult(Query::HYDRATE_ARRAY); 

합니다. 특정 ID를 들어

$query = $em->createQuery('SELECT u FROM User u WHERE u.id = ?1'); 
$query->setParameter(1, $id); 
$entity = $query->getSingleResult(Query::HYDRATE_ARRAY); 

이들 방법 QueryAbstractQuery에 정의되어있다.

+4

하지만 그것은 추상적 인 EntityRepository-> findAll() 메소드로 사용하는 것을 불가능하게 만듭니다. –

관련 문제