Lo primero que debemos hacer es escribir la configuración básica que necesitaremos para que nuestra aplicación pueda interactuar con una base de datos.
Abre el archivo .env en tu editor favorito.
Te encontrarás con algo como:
Nota que hay una línea donde figuran los datos para conectarse a una base de datos (DATABASE_URL=...).
Verás que el tipo de datos y la longitud están especificadas aquí.
Esta información vendrá muy bien pronto, confía en mí :)
Te dejo de tarea armar el resto de las entidades.
¡Excelente! Todo esto está genial, pero… ¿dónde se guardará toda esta información?
La base de datos sigue intacta… falta algo, ¿cierto?
Cierto.
Para que todo esto tenga sentido necesitamos crear la estructura que mapee nuestras clases a la base de datos.
Tenemos dos opciones para ello:
Un comando que genera la estructura de la base de datos desde 0:
php bin/console doctrine:schema:create
O bien un comando que genere una migración (que luego tendremos que ejecutar):
php bin/console make:migration
Ambos darán el mismo resultado (en este contexto), sin embargo, es una buena práctica realizar todas las operaciones de modificación de la base de datos a través de migraciones, de esa forma es muy simple reconstruir todo en caso de ser necesario, por ejemplo, al pasárselo a otro desarrollador.
Si abres el archivo generado (lo encontrarás dentro del directorio src/Migrations/) verás el código generado para crear la base de datos.
Una vez hayas terminado de definir todas las entidades debes impactar esos cambios en la base de datos. Para ello puedes usar el comando php bin/console doctrine:migrations:migrate.
El intérprete te preguntará si confirmas impactar los cambios (ya que potencialmente podrían destruir datos) y, una vez lo hayas hecho, te mostrará las sentencias SQL a medida que las ejecuta.
Al finalizar podrás ver cómo quedó tu base de datos ingresando a la consola de MySQL escribiendo
mysql
use homestead
showtables
Lo interesante de usar las migraciones es que podrás ir realizando cambios incrementales, de modo que, a medida que avances en la comprensión del problema, irás dando más y más detalles a la definición de tu modelo de datos y, mediante este mecanismo, podrás evolucionar tu base de datos consecuentemente.
En el caso de la entidad Offer encontrarás que tiene una propiedad que refiere a otra entidad: el owner (La compañía a la que pertenece la oferta).
Para estos casos Doctrine dispone de una sintaxis particular y escribirla a través del comando make de Symfony es bastante fácil.
El tipo de datos del campo owner debes definirlo como relation:
El tipo de relación es ManyToOne de modo que una oferta se relaciona con una empresa y una empresa puede tener muchas ofertas.
Cuando hayas terminado de armar la entidad Offer no olvides ejecutar el comando php bin/console make:migration para crear la nueva migración y php bin/console doctrine:migrations:migrate para actualizar tu base de datos.
En la próxima clase desarrollaremos nuestras primeras pantallas, ¡no te la pierdas!
Con respeto siempre por delante, pero menuda porqueria de curso. El formato en texto ya de por si es peor al de video, pero si ademas de eso no mantienen un buen orden coherente pues mal vamos. Te dice "Te dejo de tarea armar el resto de las entidades." pero donde narices esta eso bien explicado??. Lo unico que hay es en el tercer video una idea general del proyecto, pero no te aclara bien las entidades ni las columnas que debe tener cada cual. Sinceramente si fuese @platzi tiraria este curso a la basura y crearia uno en condiciones como se merece un Framework tan potente como Symfony. Dadle amor al comentario a ver si llamamos su atencion y nos hacen caso.
Coincido totalmente!
Con todo respeto, pero creo que los tutoriales que puedo encontrar en la red estan mejor que este curso, por primera vez me decepciona platzi
El peor formato que puede existir
*2 Este formato de lectura me ha generado mas errores en la configuración que lo aprendido realmente, está roto el material
Espero que se den cuenta y armen mejores cursos de Symfony
Recomendación
Ya terminé todo el curso y en esta clase debes definir únicamente las entidades Company y Offer.
En la clase 9 se crea la entidad User
En la clase 11 se crea la entidad Applicant
Por ahora no hay necesidad de ser muy creativos, las entidades básicas deben quedar así:
Company
name - string
email - string
Offer
name - string
owner - relation
.
Durante otras clases se adicionan un par de campos, pero no les daré Sploilers, así es suficiente.
A alguien más les sale este error al ejecutar php bin/console doctrine:schema:create?
Vale... esta clase si me decepcionó un poco, realmente lo que no me gustó es que no te dice realmente qué columnas debo crear, claro, yo las puedo deducir con base en el modelo explicado en la clase 3, pero igual y el profesor usa diferentes columnas.
Como sea, si les sale el error:
The metadata storage is not up to date, please run the sync-metadata-storage command to fix this issue.
Lo que tienen que hacer es ir a su .env y en la definición de la base de dato, al final donde dice 5.7 lo cambian por:
mariadb-10.4.16
Si estas usando MySQL y no MariaDB debería funconar con:
mysql-5.7
Aquí dejo la información:
Pues la verdad si es muy diferente a comparación de Laravel, pero todo sea por aprender algo nuevo y obtener la certificación de php con Platzi
Tal como un amigo aqui, estoy trabajando sobre mi propio sistema en linux Mint, usé mysql 5.7 y para la configuración de env y su conexión con la db usé esto ;)
Para los que trabajan fuerea de las maquinas virtuales , a mi me funcionó que en lugar de 127.0.0.1:3306 usen solo 127.0.0.1 entonces quedaría algo asi DATABASE_URL=mysql://db_user:db_password@127.0.0.1/db_name?serverVersion=5.7 , suponiendo que en Windows a veces no se tiene contraseña DATABASE_URL=mysql://db_user@127.0.0.1/db_name?serverVersion=5.7
Espero les funcione!
Me aparece este error
php bin/console doctrine:schema:create
!![CAUTION]This operation should not be
! executed in a production
! environment!!Creating database schema...InToolsException.php line 34:Schema-Tool failed withError 'An exception
occurred indriver:SQLSTATE[HY000][2002]C onnection refused' while executing DDL:CREATETABLEcompany(id INTAUTO_INCREMENTNOTNULL, name VARCHAR(255)NOTNULL, email VARCHAR(255)NOTNULL,PRIMARYKEY(id))DEFAULTCHARACTERSET utf8mb4 COLLATE`utf8mb4_unico
de_ci`ENGINE=InnoDBInAbstractMySQLDriver.php line 93:An exception occurred indriver:SQLSTATE[HY000][2002]Connection refused
InPDOConnection.php line 31:SQLSTATE[HY000][2002]Connection refused
InPDOConnection.php line 27:SQLSTATE[HY000][2002]Connection refused
doctrine:schema:create [--dump-sql][--em [EM]][-h|--help][-q|--quiet][-v|vv|vvv|--verbose][-V|--version][--ansi][--no-ansi][-n|--no-interaction][-e|--env ENV][--no-debug][--]<command>
yo sigo el curso en ubuntu, en qué paso te quedaste?
Justo en este paso no entiendo como avanzar , no entiendo como conectar a la base de datos
Lo siento, pero llevo meses intentando hacer el curso y no funciona absolutamente nada a la primera, me las tengo que arreglar por fuera.
Lo abandono por que es totalmente desesperante
Es increíble que gaste horas en esta sola clase, pero ya tengo las tablas listas en MySQL.
A esta clase le falta definir bien la estructura de las tablas, nombre y tipo de cada campo.
Voy a seguir con el curso, si todo funciona bien, regresaré a esta clase 6 y dejaré la información para que futuros estudiantes no sufran tanto como lo he hecho yo.