2013-03-17 3 views
1

으로 변환합니다. im은 쿼리 빌더 결과를 연관 배열로 변환하는 방법을 찾고 있습니다. 그러나 필요한 것은 다른 테이블의 관계 데이터를 포함하는 것입니다. getArrayResult() 메서드를 사용하면 외래 키가없는 배열을 얻을 수 있습니다. 그리고 연관 키 테이블의 데이터로 중첩 배열에 포함 된 외래 키가 필요합니다. 편집 : 나는 SOAP의 렸기 때문에이 변환이 필요queryBuilder 결과를 연관 배열

$qb = $this->_em->createQueryBuilder(); 
$qb->select('p'); 
$qb->from('XXX\MyBundle\Entity\Entity1', 'p'); 

$qb->leftJoin('p.FK1','u'); 
$qb->andWhere('u.Attr1 = :attr1'); 
$qb->setParameter('attr1', $appId); 
$qb->andWhere('u.Attr2 IS NULL'); 
$qb->leftJoin('u.FK2', 'v'); 
$qb->andWhere('v.Attr3 = :attr3'); 
$qb->andWhere('v.Attr4 IS NULL'); 
$qb->setParameter('attr3', $userId); 


$result = $qb->getQuery()->getArrayResult(); 

: 가 여기 내 코드입니다. 엔티티의 중첩 된 객체로 복잡한 객체를 반환 할 수 없습니다.

+0

당신이 당신의 요청 코드를 보여 주시겠습니까 :

이 코드를 시도

? – Gmajoulet

+0

내 질문을 편집했습니다. – gavec

답변

2

첫째, 당신은 당신이 createQueryBuilder() 메소드를 사용하고 있기 때문에 당신의 Entity1Repository.php

이 함수를 작성해야합니다, 당신은 선택과에서 방법을 사용할 필요가 없습니다. 예제에서 조인을 작성하고 있지만 조인을 반환하도록 쿼리에 요청하지는 않습니다.

<?php 

namespace XXX\\MyBundle\Entity; 

use Doctrine\ORM\EntityRepository; 

class Entity1Repository extends EntityRepository 
{ 
    public function getEntityWithJoins() 
    { 
     return $this 
      ->createQueryBuilder('p') 
      ->addSelect('u') 
      ->addSelect('v') 
      ->leftJoin('p.FK1','u') 
      ->andWhere('u.Attr1 = :attr1') 
      ->setParameter('attr1', $appId) 
      ->andWhere('u.Attr2 IS NULL') 
      ->leftJoin('u.FK2', 'v') 
      ->andWhere('v.Attr3 = :attr3') 
      ->andWhere('v.Attr4 IS NULL') 
      ->setParameter('attr3', $userId); 
      ->getQuery() 
      ->getArrayResult(); 
    } 
} 
+0

정말 고마워요. 그러나 하나의 외래 키 중첩 된 배열 만 반환하는 다음 문제가 있습니다. 그러나 한 테이블에는 두 개의 FK가 있고 두 번째 테이블에는 두 개의 FK가 있습니다. – gavec

+0

나는 그것을 얻었다. 나는 leftJoin을 하나 더 만들어야 만한다. 그러나 어떻게해야하는지 알지 못한다. 두번째 FK를 테이블에 넣는다. – gavec

+0

그냥 leftJoin을 추가하고 addSelect ... 뭐가 문제입니까? – Gmajoulet