Как получить частичный результат от построителя запроса доктрины
У меня есть объект продукта, в котором он имеет массив в качестве атрибутов:
/**
* @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')
;
Проблема в том, что я неЯ не хочу выбирать всеатрибут Поэтому я хотел получить только первый 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 () ->выберите ( «р»)
он возвращает все атрибуты продукта, но я нея не хочу, чтобы все атрибуты продукта ... Я хотел только некоторые из них, такие как идентификатор, имя и т. д. Однако один из атрибутов продукта на самом деле является сущностью (которая является ProductPicture), так как я могу вернуть это в select заявление?
РЕДАКТИРОВАТЬ:
Вот's SQL-эквивалент того, как изображения должны быть внутренне соединены:
SELECT *
FROM `product`
JOIN `product_picture` ON `product`.id = `product_picture`.product_id
WHERE `product`.id =100
LIMIT 1