2015-11-10 2 views
1

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

public function countAll() 
{ 
    return $this->createQueryBuilder('post') 
     ->select('COUNT(post)') 
     ->getQuery()->getSingleScalarResult() 
     ; 
} 

и все в порядке, потому что оно возвращает мне количество всех предметов. Я использую FOSRestBundle, поэтому мое действие в контроллере выглядит следующим образом:

public function getPostsCountAction() { 
    return $this->em->getRepository('KamilTestBundle:Post')->countAll(); 
} 

и результат на постах Адресных/count.json выглядит следующим образом:

"16" 

... Но я хочу, чтобы принять это значение как целое число. Я не знаю, почему QueryBuilder возвращает его как строку. Даже если я использую -> getQuery() -> getResult() и выгружает этот вывод, это также строка, а не целое число.

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

+0

см. Http://stackoverflow.com/a/9215880/1794894 – Rvanlaak

ответ

4

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

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

public function countAll() 
{ 
    return intval($this->createQueryBuilder('post') 
     ->select('COUNT(post)') 
     ->getQuery()->getSingleScalarResult()); 
} 
+0

Mhm, когда я использую «COUNT (post)», он всегда будет целым. Но, может быть, я смогу сделать это с учением. Например: когда я беру полные идентификаторы идентификаторов сущностей, это целые числа. –

+0

Разве мой ответ не решает? Какие еще проблемы у вас есть? – Andrius

+1

Или 'return (int) $ this-> createQueryBuilder ('post') ....-> getSingleScalarResult()'. – qooplmao

-1
return count($this->em->getRepository('KamilTestBundle:Post')->findAll()); 

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

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

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

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

+1

Да, но это решение не очень хорошая идея. Это нормально, когда у меня 16 сообщений, но когда это будет число, как 16000? Не имеет смысла брать все сообщения и считать их на стороне PHP. –

+0

Правда, но вы не указали, что у вас есть такое большое количество записей. Сбрасывание запросов db-запросов является лучшей идеей в этом случае. –

+0

Я не знаю, сколько объектов у меня будет в будущем :) Я всегда предпочитаю подсчитывать элементы с запросом БД. –