如何将计数数添加到数据数组中:学说



事实上,在使用 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();
}

相关内容

  • 没有找到相关文章

最新更新