Использование querybuilder и DQL для извлечения определенных атрибутов объекта
У меня есть следующий запрос:
$query = $em->createQueryBuilder()->select('p.id, p.name, p.price, p.cover')
->from("SiteMainBundle:Product", 'p')
->innerJoin('p.category', 'c')
->innerJoin('p.shop', 'shop')
;
И внутри моей сущности продукта обложка на самом деле - другая сущность, которая выглядит так:
/**
* @Accessor(getter="getCover")
*/
private $cover;
public function getCover()
{
if($this->pictures->count() > 0) {
return $this->pictures[0];
}
return new ProductPicture();
}
Однако, когда я делаю это, это дает мне ошибку:
"[Semantical Error] line 0, col 32 near 'cover FROM SiteMainBundle:Product': Error: Class Site\\MainBundle\\Entity\\Product has no field or association named cover"
Я знаю, что это потому, что он объявлен как частный, но я могу вызвать метод getCover из построителя запросов?
2 ответа
Решение
Это не из-за личной видимости, а потому что cover
не определяется как поле сущности.
/**
* @ORM\Column(type="string")
*
* @Accessor(getter="getCover")
*/
private $cover;
Если вы хотите загрузить только определенные поля, а не всю сущность, вам нужно использовать синтаксис частичного объекта:
$em->createQueryBuilder()->select('p.{id,name,price,cover}')
Это позволит выбрать только 4 конкретных столбца, которые вы хотите.