Я хочу получить счет всех записей в БД. Я не нашел одного рекомендованного способа сделать это. Поэтому я создал в своей сущности репо эту функцию:
public function countAll()
{
return $this->createQueryBuilder('post')
->select('COUNT(post)')
->getQuery()->getSingleScalarResult()
;
}
и это нормально, потому что он возвращает мне количество всех элементов. Я использую FOSRestBundle, поэтому мое действие в контроллере выглядит так:
public function getPostsCountAction() {
return $this->em->getRepository('KamilTestBundle:Post')->countAll();
}
и результат на addres posts/count.json выглядит так:
"16"
Но... Я хочу использовать это значение как целое. Я не знаю, почему QueryBuilder возвращает его как строку. Даже если я использую → getQuery() → getResult() и выгружает этот вывод, это также строка, а не целое число.
Как я могу принять это значение как целое? Возможно?
intval() вернет числовое представление строки.
Хотя это может быть скользкая вещь, чтобы использовать это, вы должны быть на 100% лучше, так как вы знаете, что получите только числа.
public function countAll()
{
return intval($this->createQueryBuilder('post')
->select('COUNT(post)')
->getQuery()->getSingleScalarResult());
}
return count($this->em->getRepository('KamilTestBundle:Post')->findAll());
Это должно возвращать целое число (count).
Альтернативой может быть типизация:
return (int) $this->em->getRepository('KamilTestBundle:Post')->countAll();
Это просто преобразует вашу строку в int и должно быть более эффективным, чем подсчет в PHP.