Como obter resultado parcial do construtor de consulta doutrina

Eu tenho uma entidade de produto em que tem uma matriz como atributos:

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

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

Agora no meu construtor de consultas, tenho o seguinte código:

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

A questão aqui é que eu não quero estar selecionando todo o atributo p. Então, eu só queria obter o primeiro ProductPicture na matriz de imagens (no meu caso, é semelhante ao método getCover ()). Como eu faço isso?

Até agora eu posso filtrar os atributos parciais que eu quero fazendo:

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

Assim, no exemplo acima, fiz o inner join nas imagens, mas como obtenho o primeiro elemento daqui?

Em conclusão, minha pergunta é como selecionar / consultar o primeiro ProductPicture na matriz de imagens usando o construtor de consultas? Porque quando eu faço:

$ query = $ em-> createQueryBuilder () -> select ('p')

ele retorna os atributos do produto inteiro, mas eu não quero os atributos do produto inteiro .. Eu só queria alguns deles, como o id, nome, etc. No entanto, um dos atributos do produto é na verdade uma entidade (que é o ProductPicture ), então como faço para retornar isso na instrução select?

EDITAR:

Aqui está um equivalente em SQL sobre como as imagens devem ser internas:

SELECT * 
FROM  `product` 
JOIN  `product_picture` ON  `product`.id =  `product_picture`.product_id
WHERE  `product`.id =100
LIMIT 1

questionAnswers(2)

yourAnswerToTheQuestion