Использование 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 конкретных столбца, которые вы хотите.

Другие вопросы по тегам