Contenido del curso
Base de datos
Consultas a tablas
Sistema de inicio de sesión
Gestión de base de datos
Entidades en Symfony con Doctrine
Resumen
Crear entidades en Symfony es el primer paso para construir una base de datos profesional en cualquier proyecto. Aquí aprenderás a generar usuarios, fragmentos de código y comentarios usando los comandos make:user y make:entity, junto con Doctrine para mapear cada tabla.
Esta guía es útil si estás empezando con Symfony y quieres entender cómo el framework genera automáticamente el código de tus entidades, ahorrándote cientos de líneas de programación repetitiva.
¿Cómo se crea la entidad de usuario en Symfony?
La entidad User es la base de cualquier sistema con autenticación. Symfony ofrece un comando específico para generarla con todo lo necesario: identificador, email, roles y contraseña encriptada.
El comando inicial es bin/console make:user [01:30]. Si tu proyecto es básico, el sistema te pedirá instalar paquetes adicionales antes de continuar, como el bundle de Make y el componente de seguridad. Una vez instalados, el asistente te guía paso a paso.
Durante la configuración, vas a tomar varias decisiones clave:
- Nombre de la entidad: en este caso, User.
- Integración con Doctrine, el ORM que conecta Symfony con la base de datos.
- Campo único de identificación: email, username u otro.
- Uso de contraseñas encriptadas, con opción a desactivarlas si tu login será solo con Google o GitHub.
¿Qué es Doctrine en Symfony? Es el ORM que mapea tus clases PHP a tablas de base de datos. Te permite escribir consultas y relaciones sin escribir SQL directamente.
¿Cómo agrego un campo nuevo a una entidad existente?
Para añadir un campo como name a la entidad ya creada, ejecutas bin/console make:entity [04:50] y escribes el nombre de la entidad existente. Symfony detecta que ya existe y la actualiza en lugar de crearla desde cero.
En ese flujo defines el tipo de dato, por ejemplo string con longitud 255, y decides si admite valores nulos. Para un nombre de usuario lo común es marcarlo como obligatorio.
¿Cómo crear una entidad con relaciones en Doctrine?
La segunda entidad del proyecto es Snippet, pensada para guardar fragmentos de código con relaciones jerárquicas y vínculo a un autor.
Aquí entra en juego uno de los conceptos más importantes de Doctrine: las relaciones entre entidades. Symfony te ofrece cuatro tipos cuando escribes ? en el asistente:
- many-to-one: muchos registros apuntan a uno.
- one-to-many: uno apunta a muchos.
- many-to-many: relación cruzada entre conjuntos.
- one-to-one: relación única entre dos registros.
Para que un Snippet pueda tener un padre y varios hijos, se usa una relación many-to-one con la misma entidad [06:40]. Esto habilita más adelante una funcionalidad de fork, donde un fragmento puede derivar de otro.
¿Qué hace la opción de eliminar registros huérfanos?
Al crear la relación entre Snippet y User, el asistente pregunta qué pasa si eliminas a un usuario. Si activas la eliminación de registros huérfanos, todos los fragmentos asociados a ese usuario se borran automáticamente.
Es una decisión de integridad de datos. En este proyecto se activa porque no tiene sentido conservar fragmentos sin autor.
¿Qué es una relación many-to-one? Es cuando muchos registros de una tabla apuntan a un único registro de otra. Por ejemplo, muchos fragmentos pertenecen a un solo usuario.
¿Qué propiedades lleva la entidad Snippet?
La entidad final queda con estos campos:
- parent: relación many-to-one consigo misma, admite nulos.
- author: relación many-to-one con User, no admite nulos.
- title: tipo string, longitud 255, obligatorio.
- description: tipo text, obligatorio.
- code: tipo text, obligatorio para guardar el fragmento real.
Symfony genera automáticamente los getters, setters y la configuración de Doctrine. El archivo final puede tener más de 177 líneas que tú no escribiste a mano.
¿Cómo se conectan los comentarios con usuarios y snippets?
La tercera entidad es Comment, que demuestra cómo conectar tres tablas mediante relaciones múltiples.
Cada comentario necesita un autor y un fragmento de código asociado. Por eso lleva dos relaciones many-to-one [11:20]: una hacia User y otra hacia Snippet. Ambas se configuran como no nulables, porque un comentario sin autor o sin fragmento no tiene sentido.
El tercer campo es content, de tipo text, también obligatorio. Es el comentario en sí.
En ambas relaciones se activa la eliminación de registros huérfanos: si borras un usuario o un fragmento, sus comentarios desaparecen con él. Esto mantiene la base de datos limpia y consistente.
¿Por qué Symfony genera tanto código automáticamente?
Cuando terminas el asistente, cada archivo de entidad puede tener más de 100 líneas. La idea no es leer todo de inmediato, sino entender que Symfony está siguiendo un patrón estándar que tú reutilizarás más adelante.
Este enfoque te ahorra escribir manualmente:
- Anotaciones o atributos de Doctrine.
- Métodos getter y setter para cada propiedad.
- Colecciones para las relaciones inversas.
- Lógica de adición y eliminación de elementos relacionados.
El ritmo de Symfony funciona así: ejecutas un comando, sigues un asistente y obtienes un resultado profesional. Para reforzar lo aprendido, prueba creando una entidad nueva como publicaciones con etiquetas, o productos con categorías. ¿Qué relaciones usarías en tu caso? Cuéntame en los comentarios.