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



我正在尝试计数依赖于在我的系统中添加的标记的书籍。问题是,我得到了一个错误的计数书籍有相同的标签。

图书实体:

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

标记实体:

 /**
 * @ORMManyToMany(targetEntity="Book", inversedBy="tags")
 * @ORMJoinTable(name="books_tags")
 */
protected $books;

在我的TagRepository中,我有以下条令查询生成器代码:

 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();

相关内容

  • 没有找到相关文章

最新更新