Nano Hash - криптовалюты, майнинг, программирование

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

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

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

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

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

и результат по адресу posts/count.json выглядит так:

"16"

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

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



Ответы:


1

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

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

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

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

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

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

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

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

    10.11.2015
  • Да, но это решение не очень хорошая идея. Это нормально, когда у меня 16 постов, но когда их будет 16000? Нет смысла брать все посты и считать их на стороне PHP. 10.11.2015
  • Верно, но вы не указали, что у вас такое большое количество записей. В этом случае лучше всего позволить запросу БД подсчитать их. 10.11.2015
  • Я не знаю, сколько объектов у меня будет в будущем :) Я всегда предпочитаю считать элементы с помощью запроса к БД. 10.11.2015
  • Попробуйте приведение типов, как я предложил, посмотрите, работает ли это. Я не понимаю, почему я получаю отрицательные голоса за правдоподобный ответ. 10.11.2015
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..