事实上,在使用 Doctrine 从数据库返回数据的结果后, 我正在尝试添加行计数号,而不调用另一个查询请求。
这是我的函数:
public function search(QueryBuilder $qb, string $search)
{
$qb = $qb->addSelect('COUNT(n) as count');
$search = $this->escape($search);
$qb->andWhere(
$qb->expr()->like('n.title', $qb->expr()->literal('%'.$search.'%'))
);
$qb->setMaxResults(2);
}
这是我的 DQL:
SELECT n, COUNT(n) as count FROM CoreBundleEntityNews n LEFT JOIN n.category c WHERE n.title LIKE '%re%'
结果,我需要返回我的所有数据,并带有引用行数的计数键。
我只得到第一行的问题 id = 1
,似乎计数是正确的。
所以结果应该是这样的: ['count' => 2 , [Newsn1,Newsn2]
不要告诉我使用array_count因为我需要获取数据库中的行数,并且我有一个setMaxResults
函数,所以我不会得到真正的行数。
我不知道你的桌子的配置,我只能想象。所以,这是我的尝试:
要获取表格中所有标题的计数,请执行以下操作:
# SQL
SELECT COUNT(id) AS count, GROUP_CONCAT(title SEPARATOR ', ') AS titles FROM newses GROUP BY title
# DQL. assuming you are using a Repository method:
$qb = $this->createQueryBuilder('n');
$qb
->select("COUNT(n.id) AS count, GROUP_CONCAT(n.title SEPARATOR ', ') AS titles")
->leftJoin('n.category', 'c')
->groupBy('n.title')
;
return $qb->getQuery()->getArrayResult();
要获取特定标题的计数:
# SQL
SELECT COUNT(id) AS count, GROUP_CONCAT(title SEPARATOR ', ') AS titles FROM newses WHERE n.title LIKE '%news%' GROUP BY title
# NewsRepository.php
public function getTitlesCount($title)
{
$qb = $this->createQueryBuilder('n');
$qb
->select("COUNT(n.id) AS count, GROUP_CONCAT(n.title SEPARATOR ', ') AS titles")
->leftJoin('n.category', 'c')
->where('n.title LIKE :title')
->setParameter('title', "%{$title}%")
->groupBy('n.title')
;
return $qb->getQuery()->getArrayResult();
}