CursosEmpresasBlogLiveConfPrecios

Modelo de Datos para Bolsa de Empleo: Entidades y Relaciones

Clase 4 de 17 • Curso de Symfony Framework

Contenido del curso

Symfony Framework

  • 1
    Crea una bolsa de empleo con Symfony

    Crea una bolsa de empleo con Symfony

    01:00 min
  • 2
    Autenticación y Gestión de Ofertas en Symfony

    Autenticación y Gestión de Ofertas en Symfony

    10:12 min
  • 3
    Desarrollo de Bolsa de Empleo con Symfony en PHP

    Desarrollo de Bolsa de Empleo con Symfony en PHP

    02:42 min
  • 4
    Modelo de Datos para Bolsa de Empleo: Entidades y Relaciones

    Modelo de Datos para Bolsa de Empleo: Entidades y Relaciones

    Viendo ahora
  • 5
    Virtualización y configuración de entornos de desarrollo con Homestead

    Virtualización y configuración de entornos de desarrollo con Homestead

    04:07 min
  • 6
    Creación y Configuración de un Proyecto Symfony con Homestead

    Creación y Configuración de un Proyecto Symfony con Homestead

    02:44 min
  • 7
    Creación de Entidades y Migraciones en Symfony

    Creación de Entidades y Migraciones en Symfony

    04:04 min
  • 8
    Creación de Controladores y Rutas en Symfony

    Creación de Controladores y Rutas en Symfony

    04:14 min
  • 9
    Listado y Creación de Empresas en Symfony

    Listado y Creación de Empresas en Symfony

    03:44 min
  • 10
    Control de Acceso y Creación de Usuarios en Symfony

    Control de Acceso y Creación de Usuarios en Symfony

    06:12 min
  • 11
    Creación de usuarios en Symfony para administradores

    Creación de usuarios en Symfony para administradores

    02:41 min
  • 12
    Listado y Postulación a Ofertas de Trabajo en Symfony

    Listado y Postulación a Ofertas de Trabajo en Symfony

    07:08 min
  • 13
    Layouts y herencia de templates en Twig

    Layouts y herencia de templates en Twig

    03:06 min
  • 14
    Envío de Correos en Symfony con Mailer y Transport

    Envío de Correos en Symfony con Mailer y Transport

    02:01 min
  • 15
    Despliegue de Aplicaciones Symfony en Producción

    Despliegue de Aplicaciones Symfony en Producción

    05:16 min
  • 16
    Comparativa de Frameworks PHP: Symfony, Laravel y Más

    Comparativa de Frameworks PHP: Symfony, Laravel y Más

    02:08 min
  • 17
    Symfony proyecto terminado: certifica y planifica

    Symfony proyecto terminado: certifica y planifica

    00:38 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads

      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:

      Diagrama de entidad

      Aquí vemos que:

      1. Una empresa puede publicar muchas ofertas.
      2. Muchos postulantes pueden postularse a una oferta dada
      3. 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. ;)

      Comentarios

      Paul Cortes

      Paul Cortes

      student•
      hace 6 años
        Diego Alejandro Toro Reyes

        Diego Alejandro Toro Reyes

        student•
        hace 5 años
      Alejandro Zorita

      Alejandro Zorita

      student•
      hace 6 años
      Carlos Eduardo Gomez García

      Carlos Eduardo Gomez García

      teacher•
      hace 5 años
        Jhon Fabio Cardona Martinez

        Jhon Fabio Cardona Martinez

        student•
        hace 5 años
        Osvaldo Pérez González

        Osvaldo Pérez González

        student•
        hace 4 años
      Royer Guerrero Pinilla

      Royer Guerrero Pinilla

      student•
      hace 6 años
      Yoalbert Luis

      Yoalbert Luis

      student•
      hace 4 años
      Diego Alejandro Toro Reyes

      Diego Alejandro Toro Reyes

      student•
      hace 5 años
      Yahyr Enrique Paredes Arteaga

      Yahyr Enrique Paredes Arteaga

      student•
      hace 5 años
      Miguel Angel Muñoz Pozos

      Miguel Angel Muñoz Pozos

      student•
      hace 6 años
      Usuario anónimo

      Usuario anónimo

      user•
      hace 6 años
      Arnaldo Chura Condori

      Arnaldo Chura Condori

      student•
      hace 6 años
      Cristian Ricardo Piguave Ochoa

      Cristian Ricardo Piguave Ochoa

      student•
      hace 6 años
      UNITIC ENFPP PNP

      UNITIC ENFPP PNP

      student•
      hace 6 años
      Alessandro Staiano

      Alessandro Staiano

      student•
      hace 6 años
      Jimmy Buriticá Londoño

      Jimmy Buriticá Londoño

      student•
      hace 5 años
      Japheth Calzada López

      Japheth Calzada López

      student•
      hace 6 años

      Para los graficos del modelo de datos, recomiendo que usen Draw.io, es mucho mejor ademas no tiene esa marca de agua qeu estorba un poquito para leer la grafica, excelentee por est contenido

      Igual se puede instalar la extensión en VScode y trabajar todo desde ahí es más cómodo... saludos

      He estado mirando y si que parecen muy diferentes.... Solo he trabajado con Eloquent, vamos a ver como va Doctrine

      Uhhh, a mi me gusta Eloquent, me parece muy intuitivo, vamos a mirar Doctrine, el nombre es llamativo jaja

      Totalmente de acuerdo

      He trabajado un poco tanto con Doctrine como con Eloquent. Eloquent es funcional y tiene un sintaxis muy resumida. Pero en mi opinión Doctrine es más poderoso. Además de que implementa de forma natural un MVC puro, desacoplando el acceso a datos del modelo, que con Eloquent el acceso a datos está acoplado en el modelo.

      Todo pinta de lujo, me gusta esta metodología

      Ahora empieza a tomar mas sentido.

      No sé si la segunda clase estaba mal "puesta" o en realidad el curso es así, porque ahora comienzo a comprender desde la tercera clase, me da la impresión que la clase 2 iba más adelante y el profe se equivocó... bueno seguimos en la ruta.. animo a todos

      Genial a usar ORM y adios a los Store procedure xd

      Yo nunca he usado esté framework aver que tal me va

      Continuemos :) 👍

      Que emoción estaba esperando este curso desde hace mucho tiempo

      Este framework me interesa.

      Excelente. pero seria mejor con videotutorial

      Ganas de ver como es Doctrine, sera mejor o peor que Eloquent?

      He trabajado con Eloquent, supongo que Doctrine debe ser similar.

      Una forma diferente de tomar un curso, es bueno siempre conocer nuevas maneras