1

我有以下查询:

   $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 吗?

4

2 回答 2

1

如果您只想加载特定字段,而不是整个实体,则需要使用部分对象语法:

$em->createQueryBuilder()->select('p.{id,name,price,cover}')

这将仅选择您想要的 4 个特定列。

于 2013-06-12T09:59:47.637 回答
0

这不是因为私有可见性,而是因为cover没有定义为实体字段。

/** 
 * @ORM\Column(type="string")
 *
 * @Accessor(getter="getCover") 
 */
private $cover;
于 2013-06-07T05:25:23.787 回答