多行聚合选择结果也包括整个对象水合

时间:2014-12-01 08:29:31

标签: symfony doctrine-orm

在Symfony2上,我有一个名为Product的实体,由Doctrine2管理并与单个类别和位置相关联。

Class Product {
  protected $id;
  protected $title;
  // n additional fields
  protected $productCategory;
  protected $productDepot;
}

我需要实现的是,在单个查询中选择类别和位置COUNT。

所以我在下面的DQL中使用一些分组执行以下COUNT选择。

$this->em->getRepository('MyCoreBundle:Product')
  ->createQueryBuilder('P')
  ->addSelect('IDENTITY(P.productCategory) AS category_id')
  ->addSelect('IDENTITY(P.productDepot) AS location_id')
  ->addSelect("COUNT(P.id) AS tag_count")
  ->addGroupBy('P.productCategory')
  ->addGroupBy('P.productDepot')
  ->getQuery()
  ->getScalarResult();

然而,当它被执行时,整个结果如下:

 $result = [
    0 => [
       P_id => ...,
       P_title => ...,
       P_stock => ....,
       /*
        * Many many additional fields of the entity
        */
       category_id => 15,
       location_id => 40,
       tag_count => 20
    ],
    ...
 ];

但显然我只需要category_idlocation_idtag_count字段。由于表格很大(就像每个人都有一个,现在如此),我试图尽可能减少查询的占用空间。

到目前为止,我尝试添加id的部分字段(如下所示),但它没有意义。

$this->em->getRepository('MyCoreBundle:Product')
  ->createQueryBuilder('P')
  ->addSelect('partial P.{id}')
  ->addSelect('IDENTITY(P.productCategory) AS category_id')
  ->addSelect('IDENTITY(P.productDepot) AS location_id')
  ->addSelect("COUNT(P.id) AS tag_count")
  ->addGroupBy('P.productCategory')
  ->addGroupBy('P.productDepot')
  ->getQuery()
  ->getScalarResult();

我是否尝试实现不可能实现的目标,或者您是否有任何想法只获得实体的聚合字段(或仅使用附加ID字段)?

0 个答案:

没有答案