Aprende a generar fácilmente las entidades de doctrine a partir de una base de datos y a crear el CRUD en Symfony 5.

Cómo generar las entidades a partir de una base de datos y crear el CRUD automáticamente en Symfony 5

Existe un enfoque realmente útil para crear fácilmente formularios para administrar los registros en tu base de datos en Symfony. Este es el enfoque de ingeniería inversa, donde el modelo ya se ha construido, por lo que sería una pérdida de tiempo diseñar las entidades desde cero, ya que ya existen. En este breve artículo, te explicaré cómo crear fácilmente las entidades de doctrine a partir de las tablas de tu base de datos de forma automática en Symfony 5.

1. Configurar las credenciales de la base de datos

Lo primero que debe hacer es configurar la conexión a la base de datos en su proyecto. En Symfony 5, esto se puede hacer fácilmente a través del parámetro DATABASE_URL en el archivo .env:

# For example for a MySQL database
DATABASE_URL=mysql://USERNAME:PASSWORD@127.0.0.1:3306/DATABASE_NAME?serverVersion=5.7
# or if you use PostgreSQL
DATABASE_URL="postgresql://127.0.0.1:5432/db?serverVersion=13&charset=utf8"

Una vez que el proyecto tenga acceso a la base de datos, ahora deberías poder construir las entidades automáticamente.

2. Crear entidades automáticamente

Las entidades son objetos con identidad, la identidad tiene un significado conceptual en tu proyecto. Por ejemplo, para la base de datos MySQL que usaremos en este artículo, tenemos 2 tablas, Person y State:

MySQL Database Relational

Entonces deberíamos tener 2 entidades. Se pueden generar automáticamente con el siguiente comando de Symfony:

php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/Entity

El comando generará las entidades de las tablas en tu base de datos en el formato de anotación en el directorio app/src/Entity, generando la siguiente salida:

Importing mapping information from "default" entity manager
  > writing src/Entity/Person.php
  > writing src/Entity/State.php
Done.

Las entidades generadas ( Entity/Person.phpEntity/State.php) se verán así:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * State
 *
 * @ORM\Table(name="state")
 * @ORM\Entity
 */
class State
{
    /**
     * @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;
}

Son entidades simples sin getters ni setters, por lo que no está completo en este momento. Ahora debes ejecutar el siguiente comando para generar los getters y setters de las entidades:

php bin/console make:entity --regenerate App

Esto debería generar el siguiente resultado:

 updated: src/Entity/Person.php
 updated: src/Entity/State.php

  Success! 

Entonces, si verificas ahora las entidades, deberías ver los metodos set y get de cada propiedad en la clase:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * State
 *
 * @ORM\Table(name="state")
 * @ORM\Entity
 */
class State
{
    /**
     * @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;

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

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

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

        return $this;
    }
}

Ahora es importante mencionar que, en este caso, tenemos una ManyToOnerelación en la statepropiedad de la entidad Person. Entonces, si crea el CRUD para estas entidades, el formulario de Persona tendrá un campo de selección que le permitirá seleccionar un solo estado para almacenar la entidad de persona. Para evitar el error: el  Object of class \App\Entity\State could not be converted to a string , debes agregar el método mágico toString en la clase de la entidad  State que devuelve el nombre del estado que se mostrará en la selección cuando exista el formulario:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * State
 *
 * @ORM\Table(name="state")
 * @ORM\Entity
 */
class State
{
    // ... //
    
    public function __toString() {
        return $this->name;
    }
}

3. Crear CRUD

Finalmente, para crear el CRUD desde Symfony 5 puedes hacerlo fácilmente con un solo comando, la instrucción make:crud:

php bin/console make:crud

Esto iniciará un mensaje simple que te pedirá el nombre de la entidad que estás intentando usar para crear el CRUD. Alternativamente, si no deseas que se te solicite, simplemente coloca el nombre de la entidad como el primer argumento posicional. En nuestro caso, para crear el CRUD de la entidad Person, el comando sería el siguiente:

php bin/console make:crud Person

Generará la siguiente salida:

The class name of the entity to create CRUD (e.g. GentleElephant):
 > Person

 created: src/Controller/PersonController.php
 created: src/Form/PersonType.php
 created: templates/person/_delete_form.html.twig
 created: templates/person/_form.html.twig
 created: templates/person/edit.html.twig
 created: templates/person/index.html.twig
 created: templates/person/new.html.twig
 created: templates/person/show.html.twig

           
  Success! 
           

 Next: Check your new CRUD by going to /person/

El generador CRUD registrará automáticamente una ruta con el nombre de la entidad que usó, un controlador que manejará los conceptos básicos del crud como el listado principal, los formularios para editar, mostrar y eliminar automáticamente para ti. En este caso, para la entidad Person, la ruta es http: // myapp /person . Donde puedes interactuar con cualquier vista que desees, por ejemplo, en la vista de índice debería ver todos los registros en la tabla Persona de tu base de datos, puedes editar cada registro y actualizar sus valores, registrar una nueva persona o eliminarlo de la base de datos:

CRUD Symfony 5

Y es por eso que amamos Symfony, ¿no fue super rápido crear el CRUD para esas tablas en tu base de datos?

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