Ver índice de contenidos del libro

8.8. No crees el modelo dos veces

La desventaja de utilizar un ORM es que se debe definir la estructura de datos 2 veces: una para la base de datos y otra para el modelo de objetos. Por suerte, Symfony dispone de utilidades de línea de comandos para generar uno en función del otro, de modo que se evita duplicar el trabajo.

8.8.1. Construir la estructura SQL de la base de datos en función de un esquema existente

Si se crea la aplicación escribiendo el archivo schema.yml, Symfony puede generar las instrucciones SQL que crean las tablas directamente a partir del modelo de datos en YAML. Para generarlas, se ejecuta el siguiente comando desde el directorio raíz del proyecto:

$ php symfony doctrine:build-sql

El anterior comando crea un archivo schema.sql en el directorio miproyecto/data/sql/. El código SQL generado se optimiza para el sistema gestor de bases de datos definido en el archivo databases.yml.

Puedes utilizar este archivo schema.sql para construir la base de datos. Si utilizas MySQL, puedes hacerlo con el siguiente comando:

$ mysqladmin -u root -p create blog
$ mysql -u root -p blog < data/sql/schema.sql

El código SQL generado también es útil para reconstruir la base de datos en otro entorno o para cambiar de sistema gestor de bases de datos.

Nota La línea de comandos también incluye una tarea para volcar los contenidos de un archivo de texto a la base de datos. El Capítulo 16 incluye más información sobre la tarea doctrine:data-load y sobre los archivos de datos en formato YAML llamados "fixtures".

8.8.2. Construir un modelo de datos en formato YAML a partir de una base de datos existente

Symfony puede utilizar la capa de acceso a bases de datos proporcionada por Doctrine para generar un archivo schema.yml a partir de una base de datos existente, gracias a la introspección (que es la capacidad de las bases de datos para determinar la estructura de las tablas que la forman). Se trata de una opción muy útil cuando se hace ingeniería inversa o si se prefiere trabajar primero en la base de datos antes de trabajar con el modelo de objetos.

Para construir el modelo, el archivo databases.yml del proyecto debe apuntar a la base de datos correcta y debe tener todas las opciones de conexión. Después, ejecuta el comando doctrine:build-schema:

$ php symfony doctrine:build-schema

Se genera un nuevo archivo schema.yml a partir de la estructura de la base de datos y se almacena en el directorio config/doctrine. Ahora se puede construir el modelo a partir de este esquema.