У меня есть объект продукта, в котором он имеет массив в качестве атрибутов:
/**
* @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()->выбрать('p')
он возвращает все атрибуты продукта, но мне не нужны все атрибуты продукта. Мне нужны только некоторые из них, такие как идентификатор, имя и т. д. Однако один из атрибутов продукта на самом деле является сущностью (то есть ProductPicture ), так как мне вернуть это в операторе select?
ИЗМЕНИТЬ:
Вот эквивалент SQL о том, как изображения должны быть объединены внутри:
SELECT *
FROM `product`
JOIN `product_picture` ON `product`.id = `product_picture`.product_id
WHERE `product`.id =100
LIMIT 1
where
или как выполнить запрос? - person cheesemacfly   schedule 08.06.2013