Symfony ManyToMany查询生成器计数返回错误的数字

时间:2015-04-02 10:18:20

标签: php mysql symfony doctrine-orm

我试图计算书籍,这依赖于我系统中添加的标签。 问题是,我得到错误数量的具有相同标签的计数书。

书本实体:

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

标签的实体:

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

在我的TagRepository中,我有以下Codetr for 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)的书呢?

此致++

1 个答案:

答案 0 :(得分:1)

您需要通过添加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();