Symfony ManyToMany Query Builder Count 返回错误的数字

Symfony ManyToMany Query Builder Count returning wrong number

我正在尝试计算依赖于我系统中添加的标签的书籍。 问题是,我计算的具有相同标签的书籍数量有误。

图书实体:

 /**
 * @ORM\ManyToMany(targetEntity="Tag", mappedBy="books", cascade={"persist"})
 */
protected $tags;

标签实体:

 /**
 * @ORM\ManyToMany(targetEntity="Book", inversedBy="tags")
 * @ORM\JoinTable(name="books_tags")
 */
protected $books;

在我的 TagRepository 中,我有以下 Doctrine Query Builder 代码:

 return $this->createQueryBuilder('t')
        ->innerJoin('t.books', 'b')
        ->addSelect('t.name')
        ->addSelect('t.id')
        ->addSelect('COUNT(b.id) AS amount')
        ->andWhere('t.name LIKE :name')
        ->setParameter('name', $term . '%')
        ->getQuery()
        ->getResult();

这个查询有什么问题?为什么不计算依赖于一个找到的标签 ($term) 的书籍?

问候++

您需要通过添加 groupBy 语句对行进行分组:

 return $this->createQueryBuilder('t')
        ->innerJoin('t.books', 'b')
        ->addSelect('t.name')
        ->addSelect('t.id')
        ->addSelect('COUNT(b.id) AS amount')
        ->groupBy('t.id')
        ->andWhere('t.name LIKE :name')
        ->setParameter('name', $term . '%')
        ->getQuery()
        ->getResult();