- 1

Cómo funciona este curso y que aprenderás sobre Symfony
01:00 - 2
Autenticación y Gestión de Ofertas en Symfony
10:12 - 3
Desarrollo de Bolsa de Empleo con Symfony en PHP
02:42 - 4
Modelo de Datos para Bolsa de Empleo: Entidades y Relaciones
02:17 - 5
Virtualización y configuración de entornos de desarrollo con Homestead
04:07 - 6
Creación y Configuración de un Proyecto Symfony con Homestead
02:44 - 7
Creación de Entidades y Migraciones en Symfony
04:04 - 8
Creación de Controladores y Rutas en Symfony
04:14 - 9
Listado y Creación de Empresas en Symfony
03:44 - 10
Control de Acceso y Creación de Usuarios en Symfony
06:12 - 11
Creación de usuarios en Symfony para administradores
02:41 - 12
Listado y Postulación a Ofertas de Trabajo en Symfony
07:08 - 13
Layouts y herencia de templates en Twig
03:06 - 14
Envío de Correos en Symfony con Mailer y Transport
02:01 - 15
Despliegue de Aplicaciones Symfony en Producción
05:16 - 16
Comparativa de Frameworks PHP: Symfony, Laravel y Más
02:08 - 17

Cierre
00:38
Modelo de Datos para Bolsa de Empleo: Entidades y Relaciones
Clase 4 de 17 • Curso de Symfony Framework
Repaso del proyecto
Recordemos brevemente el proyecto, siempre es importante tenerlo fresco, más aún en esta etapa donde definiremos la columna vertebral de la aplicación: el modelo de datos.
Se trata de una bolsa de empleo donde empresas pueden publicar ofertas y usuarios que están en búsqueda de trabajo pueden postularse a ellas.
El modelo de datos
Como en cualquier aplicación de mediana complejidad, es importante dedicar un espacio especial a analizar cómo vamos a almacenar la información.
En nuestro caso, tratándose de un sistema transaccional, es bastante claro que un modelo relacional será lo más adecuado.
En esta clase no abordaré detalles de implementación (como qué motor de bases datos utilizaremos) y lo haré así a propósito, para concentrar la atención a definir, de la mejor manera que podamos, cuáles son las entidades que intervienen y cómo se relacionan entre sí.
Comencemos.
Las entidades
De la propia definición del problema emanan naturalmente las siguientes entidades:
- Empresa
- Postulante
- Oferta
Viéndolo en forma de Diagrama de Entidad-Relación obtendremos algo como:
Aquí vemos que:
- Una empresa puede publicar muchas ofertas.
- Muchos postulantes pueden postularse a una oferta dada
- Cada oferta puede recibir múltiples postulaciones.
Seguramente a medida que avancemos nuestro modelo se volverá más complejo, por el momento es suficiente con esta primera versión.
Implementación
Si tuvieras que codear esto en php, ¿cómo lo harías?
Seguramente recurrirías a un modelo de clases, ¿cierto?
Algo como:
class Company { private $name; private $offers = []; } class Offer { private $name; private $company; private $applicants = []; } class Applicant { private $name; private $offers = []; }
Claro que con estas definiciones apenas comenzamos… nos faltaría, al menos, crear los constructores de las clases y algunos métodos para darles vida:
class Company { private $name; private $offers = []; public function __construct(string $name) { $this->name = $name; } public function getName() { return $this->name; } public function addOffer(Offer $offer) { $this->offers[] = $offer; } public function getOffers() : array { return $this->offers; } }
Bien. Se va pareciendo un poco más a algo útil, ¿o no?
Lo mismo habría que hacer con las demás clases… pero hay un par de detalles que estamos dejando un poco de lado… ¿Cómo se van a llenar estos datos?, ¿Cómo vamos a manejar la persistencia?
Y aquí es donde las cosas empiezan a ponerse cuesta arriba, ¿o no? :)
Si tuviésemos (¡o quisiésemos!) hacer todo esto por nuestra cuenta ciertamente tendríamos un arduo trabajo por delante.
Claro que si quisiéramos encararlo de ese modo no estaríamos estudiando Symfony :)
Una parte super importante de un framework fullstack es un componente conocido como ORM (Object Relational Mapper).
Se trata de una serie de clases que permiten interactuar con una base de datos relacional de un modo simple y orientado a objetos.
En PHP existen varios ORMs (entre ellos Eloquent, Propel o ReadBean), sin embargo, por lejos, el más utilizado junto a Symfony es Doctrine y es precisamente el que utilizaremos en este curso.
A través de Doctrine podremos:
- Generar código en forma automática
- Definir la relación entre nuestras entidades sin salirnos del código en ningún momento
- Mantener nuestra base de datos sincronizada con la definición de nuestras clases
Todos estos detalles los veremos más adelante en el curso pero primero lo primero: ¡a montar un entorno de trabajo donde podamos desarrollar con comodidad!
Acompáñame a la siguiente clase donde te enseñaré a usar un entorno virtualizado para programar a gusto. ;)