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