2013-06-08 2 views
0

제품이라고하는 엔티티가 있습니다. 제품에 ProductPicture 배열이 있습니다.테이블의 첫 번째 행에서 내부 조인을 수행합니다.

/** 
* @ORM\OneToMany(targetEntity="Site\MainBundle\Entity\ProductPicture", mappedBy="product", cascade={"persist","remove"}) 
*/ 
protected $pictures; 

그래서 나는 다음과 같은 쿼리 교리 DQL 쿼리가 :

$query = $em->createQueryBuilder() 
      ->select('p.id, p.name, pictures.name') 
      ->from("SiteMainBundle:Product", 'p') 
      ->innerJoin('p.category', 'c') 
      ->innerJoin('p.shop', 'shop') 
      ->innerJoin('p.pictures', 'pictures'); 

이것이하는 일은 그 내부 사진의 모든 단일 행으로 참여한다는 것을입니다 (때문에 다음은 코드의 조각이다 각 제품은) 마뉘 사진을 가지고 있으며, 나는이 밖으로 JSON을 생성하므로 경우,이 같은 반환합니다

[{"id":346,"name":"11b650390dde2f3132875c2f265490040ce00d93.jpg"}, 
{"id":346,"name":"98c03f5e7896cf22143f5303f8fa54e7cb6a42d5.jpg"}, 
{"id":346,"name":"776c975ed78091fbdaaf0fceac90115258b822a0.jpg"}, 
{"id":346,"name":"b02f44ff728d0ca7b498038bfd331a364eb712a3.jpg"}, 
{"id":346,"name":"eccc317200ba6b3c01fd1815bd29ebac0b96f16a.jpg"}] 

난 단지이가 합류 내부가되고 싶었을 이 같은 배열의 ProductPicture 제 모든 등이 생성 무언가 :

[{"id":346,"name":"11b650390dde2f3132875c2f265490040ce00d93.jpg"}]; 

아래 손은 내가 첫 번째 일 필요는 ProductPicture의 모든 필요가 없다는 것입니다.

내가 배열의 첫 번째 ProductPicture를 얻는 제품 엔티티에 getCover라는 방법이 그냥 그림의 목적 :

/** 
* @Accessor(getter="getCover") 
*/ 
private $cover; 
public function getCover() 
{ 
    if($this->pictures->count() > 0) { 
     return $this->pictures[0]; 
    } 
    return new ProductPicture(); 
} 

이 나는 ​​내부가 수행 할 가입 정확히 원하는 것입니다.

답변

0

이용 하나 ...

getQueryBuilder()-> /*...*/ ->getQuery()->getSingleResult(); 

또는 ...

getQueryBuilder()-> /*...*/ ->getQuery()->getOneOrNullResult() 

또는 (어떤 결과 경우 예외를 throw하지 않습니다) ...

getQueryBuilder()-> /*...*/ ->getQuery()->fetchOne()->getResult(); 

또는 (더러운 - 배열로, [0]으로 액세스 할 수 있지만, 아마도 원하는대로) ...

getQueryBuilder()-> /*...*/ ->getQuery()->setMaxResults(1)->getResult(); 
관련 문제