Aprende a contar y obtener un solo entero con el total de registros de tu consulta en Doctrine.

En este breve artículo, te explicaremos cómo contar cuántos registros hay en una tabla con una clave principal con Doctrine en Symfony 4.

Cuente todas las filas de una tabla (repositorio)

En este ejemplo, asumiremos que ya tiene tablas en su base de datos y ya creó los modelos para ellas. Aquí, usaremos un modelo de Artículos disponible en el archivo Entity\Articles.php:

<?php

// src/Entity/Articles.php
namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Articles
 *
 * @ORM\Table(name="articles")
 * @ORM\Entity(repositoryClass="App\Repository\articlesRepository")
 */
class Articles
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="bigint", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255, nullable=false)
     */
    private $name;

    /**
     * @var string|null
     *
     * @ORM\Column(name="video", type="text", length=65535, nullable=true)
     */
    private $video;

    /**
     * @var string
     *
     * @ORM\Column(name="content", type="text", length=0, nullable=false)
     */
    private $content;
 

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    } 

    public function getContent(): ?string
    {
        return $this->content;
    }

    public function setContent(string $content): self
    {
        $this->content = $content;

        return $this;
    } 
}

La tabla contiene una clave principal con el identificador de id como principal. En nuestro controlador, contaremos cuántas filas hay en la tabla con la siguiente consulta:

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

// Incluya la clase de la entidad (tabla) que desea consultar
use App\Entity\Articles; 

class AdminController extends AbstractController
{
    public function index()
    {  
        // 1. Obtener administrador de doctrine
        $em = $this->getDoctrine()->getManager();
        
        // 2. Configurar repositorio de alguna entidad
        $repoArticles = $em->getRepository(Articles::class);
        
        // 3. Consultar cuántas filas hay en la tabla de artículos
        $totalArticles = $repoArticles->createQueryBuilder('a')
            // Filtra por algún parámetro si quieres
            // ->where('a.published = 1')
            ->select('count(a.id)')
            ->getQuery()
            ->getSingleScalarResult();
        
        // 4. Devuelve un número como respuesta
        // e.g 972
        return new Response($totalArticles);
    }
}

Tenga en cuenta que no estamos llamando absolutamente toda la información de la tabla, sino solo la instrucción de conteo que contará cuántos campos tienen el campo id. La función getSingleScalarResult recupera un único valor escalar del resultado devuelto por dbms. Si el resultado contiene más de un valor escalar, se lanza una excepción. No se aplica la distinción puro / mixto.

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores