Cómo obtener un resultado parcial del constructor de consultas de doctrina

Tengo una entidad de producto en la que tiene una 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();
    }

Ahora en mi generador de consultas, tengo el siguiente código:

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

El problema aquí es que no quiero seleccionar todos los atributos de p. Así que solo quería obtener la primera ProductPicture en la matriz de imágenes (en mi caso, es similar al método getCover ()). ¿Cómo hago esto?

Hasta ahora puedo filtrar los atributos parciales que quiero haciendo:

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

así que en el ejemplo anterior he hecho uniones internas en las imágenes, pero ¿cómo obtengo el primer elemento de aquí?

En conclusión, mi pregunta es ¿cómo selecciono / pregunto la primera ProductPicture en la matriz de imágenes usando el generador de consultas? Porque cuando lo hago:

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

devuelve todos los atributos del producto, pero no quiero todos los atributos del producto. Solo quería algunos de ellos, como el id, el nombre, etc. Sin embargo, uno de los atributos del producto es en realidad una entidad (que es la ProductPicture ), entonces, ¿cómo devuelvo esto en la declaración de selección?

EDITAR:

Aquí hay un equivalente de SQL sobre cómo las imágenes deben unirse internamente:

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta