Доктрина Symfony2 получает все как целое число

1

Я хочу получить счет всех записей в БД. Я не нашел одного рекомендованного способа сделать это. Поэтому я создал в своей сущности репо эту функцию:

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() и выгружает этот вывод, это также строка, а не целое число.

Как я могу принять это значение как целое? Возможно?

Теги:
doctrine2
query-builder

2 ответа

4
Лучший ответ

intval() вернет числовое представление строки.

Хотя это может быть скользкая вещь, чтобы использовать это, вы должны быть на 100% лучше, так как вы знаете, что получите только числа.

public function countAll()
{
    return intval($this->createQueryBuilder('post')
        ->select('COUNT(post)')
        ->getQuery()->getSingleScalarResult());
}
  • 0
    Мм, когда я использую "COUNT (post)", это всегда будет целое число. Но, может быть, я могу сделать это с доктриной. Например: когда я беру полные сущности, идентификаторы записей являются целыми числами.
  • 0
    Разве мой ответ не решает это? Какие еще проблемы у вас есть?
Показать ещё 1 комментарий
-1
return count($this->em->getRepository('KamilTestBundle:Post')->findAll());

Это должно возвращать целое число (count).

Альтернативой может быть типизация:

 return (int) $this->em->getRepository('KamilTestBundle:Post')->countAll();

Это просто преобразует вашу строку в int и должно быть более эффективным, чем подсчет в PHP.

  • 4
    Да, но это решение не очень хорошая идея. Это нормально, когда у меня 16 постов, но когда это будет число вроде 16000? Не имеет смысла брать все посты и считать их на стороне PHP.
  • 0
    Правда, но вы не указали, что у вас такое большое количество записей. В этом случае лучшей идеей будет позволить запрос в базе данных.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню