在Doctrine DQL中,我试图从多对多关联中获取计数而没有我正在使用的实体进行逆映射。
$this->getEntityManager()->createQueryBuilder()
->select('a AS attribute')
->addSelect('COUNT(p) AS num_products')
->from('VendorAttributeBundle:Attribute', 'a')
->leftJoin('VendorProductBundle:Product', 'p', 'WITH', 'a MEMBER OF p.attributes')
->groupBy('a.id');
以上运行,但0
字段返回num_products
。
答案 0 :(得分:0)
最后,我继续创建逆映射。我不能没有它。
供参考:
在Attribute
实体中:
/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="Vendor\ProductBundle\Entity\Product", mappedBy="attributes")
*/
private $products;
在Product
实体中:
/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="Vendor\AttributeBundle\Entity\Attribute", inversedBy="products")
*/
private $attributes;
然后以下工作:
$this->getEntityManager()->createQueryBuilder()
->select('a AS attribute')
->addSelect('COUNT(p) AS num_products')
->from('VendorAttributeBundle:Attribute', 'a')
->leftJoin('VendorProductBundle:Product', 'p')
->groupBy('a.id');