在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_id
,location_id
和tag_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字段)?