我正在尝试计数依赖于在我的系统中添加的标记的书籍。问题是,我得到了一个错误的计数书籍有相同的标签。
图书实体:
/**
* @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();