Как получить частичный результат от построителя запроса доктрины
У меня есть объект продукта, в котором он имеет массив в качестве атрибутов:
/**
* @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();
}
Теперь в моем конструкторе запросов у меня есть следующий код:
$query = $em->createQueryBuilder()->select('p')
->from("SiteMainBundle:Product", 'p')
->innerJoin('p.category', 'c')
->innerJoin('p.shop', 'shop')
;
Проблема здесь в том, что я не хочу выбирать все атрибуты p. Поэтому я хотел получить только первый ProductPicture в массиве картинок (в моем случае выше он похож на метод getCover ()). Как мне это сделать?
До сих пор я могу отфильтровать частичные атрибуты, которые я хочу, выполнив:
$query = $em->createQueryBuilder()->select('p.name, p.id')
->from("SiteMainBundle:Product", 'p')
->innerJoin('p.category', 'c')
->innerJoin('p.shop', 'shop')
->innerJoin('p.pictures', 'pictures')
;
поэтому в приведенном выше примере я сделал внутреннее соединение на картинках, но как мне получить первый элемент отсюда?
В заключение мой вопрос заключается в том, как выбрать / запросить первое изображение ProductPicture в массиве картинок с помощью построителя запросов? Потому что, когда я делаю:
$ query = $ em-> createQueryBuilder () -> select ('p')
он возвращает целые атрибуты продукта, но мне не нужны целые атрибуты продукта. Мне нужны только некоторые из них, такие как идентификатор, имя и т. д. Однако один из атрибутов продукта на самом деле является сущностью (то есть ProductPicture ), так как мне вернуть это в операторе выбора?
РЕДАКТИРОВАТЬ:
Вот SQL-эквивалент того, как картинки должны быть внутренне соединены:
SELECT *
FROM `product`
JOIN `product_picture` ON `product`.id = `product_picture`.product_id
WHERE `product`.id =100
LIMIT 1