Запрос подсчета Symfony QueryBuilder возвращает массив

Я пытаюсь сделать запрос на подсчет в поле идентификатора.

У меня есть следующий код в моем контроллере:

$qb = $em->createQueryBuilder();
$qb->select('count(c.id)')
        ->from('MyBundle:Category', 'c')
        ->where('c.author = :aut')
        ->setParameter('aut', $author);

$result = $qb->getQuery()->getResult();

return $this->render('MyCategoryBundle:Category:categories.html.twig', array(
       'categories' => $categories,
       'result' => $result
    ));

И на мой взгляд.html.twig :

{% for category in categories %}      
       <li>
           {{ category.title }} 
           {% for total in  result %}
                {{ total }}
           {% endfor %}
      </li>          
{% endfor %}

Он возвращает название категории и строку «Массив». Что я делаю не так ?


person Community    schedule 29.11.2013    source источник


Ответы (2)


getResult() возвращает массив (набор) объектов. Вы должны использовать getSingleScalarResult(), чтобы получить результат в виде простого числа.

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

person A.L    schedule 29.11.2013
comment
Ок, я этого не знал. Да, я хочу отображать количество категорий для одного автора. Я получаю его идентификатор с помощью $author var. - person ; 29.11.2013
comment
Итак, почему вы используете цикл for для категорий? - person A.L; 29.11.2013
comment
Это было связано с моими результатами массива, использующими getResults(). Я действительно ошибался. Он работает с getSingleScalarResult() и удалением цикла в представлении. Спасибо за вашу помощь и объяснение! - person ; 29.11.2013

Попробуй это:

$qb = $em->createQueryBuilder();
$qb->select('count(c.id) AS cnt')
        ->from('MyBundle:Category', 'c')
        ->where('c.author = :aut')
        ->setParameter('aut', $author);

$result = $qb->getQuery()->getResult();

а затем в ветке {{result.cnt}}

person repincln    schedule 29.11.2013