如何将计数数添加到数据数组:Doctrine

时间:2018-04-30 15:42:12

标签: symfony doctrine-orm doctrine

实际上,在使用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 CoreBundle\Entity\News n LEFT JOIN n.category c WHERE n.title LIKE '%re%'

我需要使用一个引用行数的计数键返回所有数据。

问题是我只获得id = 1的第一行,而且计数数似乎正确。

所以结果应该是这样的: ['count' => 2 , [Newsn1,Newsn2]

不要告诉我使用array_count因为我需要获取数据库中的行数,并且我有一个setMaxResults函数,所以我不会得到实际的行数。

1 个答案:

答案 0 :(得分:1)

我不知道你桌子的配置,我只能想象。所以,这是我的尝试:

获取表格中所有标题的计数:

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