[Symfony] Jak zwrócić tylko wyliczoną wartość wykorzystując QueryBuilder ?

Programowanie
[Symfony] Jak zwrócić tylko wyliczoną wartość wykorzystując QueryBuilder ?

Tworząc metody wyliczające jakieś wartości w naszej aplikacji chcielibyśmy, aby dana metoda zwracała tylko wyliczoną wartość. Możemy zrealizować to na wiele sposobów jednak wykorzystując QueryBuilder możemy zrealizować to w bardzo prosty sposób.

Założenie jest proste, mamy encję produkt

<?php

namespace Pit\TestBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Product
 *
 * @ORM\Table(name="products")
 * @ORM\Entity(repositoryClass = "Pit\TestBundle\Repository\ProductRepository")
 */
class Order
{
...

Najważniejszy element w powyższej encji to zapis definiujący repozytorium @ORM\Entity(repositoryClass = "Pit\TestBundle\Repository\ProductRepository")

Klasa repozytorium wygląda następująco:

<?php

namespace Pit\TestBundle\Repository;

use Doctrine\ORM\EntityRepository;

class ProductRepository extends EntityRepository
{
    public countProducts()
    {
        $qb = $entityManager->createQueryBuilder();
        $qb->select('count(product.id)');
        $qb->from('PitTestBundle:Product','product');

        return $qb->getQuery()->getSingleScalarResult();
    }
...

Jak widać mamy tutaj metodę countProducts, która powinna zwrócić ilość produktów. Do tego celu wykorzystana została funkcja count po stronie bazy danych. Ostatni element odpowiedzialny za zwrócenie wyliczonej wartości to metoda getSingleScalarResult() i to ona tutaj jest kluczowym elementem, gdyż zwraca dokładnie ten jeden wyliczony element z zapytania.