Как добавить число в массив данных: Doctrine - PullRequest
0 голосов
/ 30 апреля 2018

Фактически, после возвращения результата данных из базы данных с использованием 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 голосов
/ 01 мая 2018

Я не знаю конфигурацию вашего стола, я просто могу представить. Итак, вот моя попытка:

Для подсчета всех названий в вашей таблице:

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