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