Noviembre 28, 2016
hjuarez
En este artículo se explicara como crear un modelo de base de datos con doctrine en Symfony 3.1.
Pasos:
1. Crear una entity, que va a hacer una de las tablas dentro de la base de datos.
Utilizando la terminal, nos ubicaremos dentro de la carpeta de symfony y ejecutamos lo siguiente:
bin/console doctrine:generate:entity
Saldrá una guía interactiva para crear dicha entity.
En esta guía le solicita el bundle donde se va agregar la entity seguido de dos puntos y el nombre de la entity (Es recomendable poner la primer letra en mayúscula).
Después le solicita el formato en que se va a mapear la información, por default viene annotation, pero este se puede cambiar a otro formato, si así usted lo desea.
También le solicita los campos campos que va a tener esta entity, por default le introduce uno, que es el id, después de este, se pueden agregar los campos que usted necesite y cambiar el tipo de campo, con solo escribir de acuerdo a los ejemplos que se le muestran en la parte de Availble types.
En este ejemplo crearemos una entidad llamada Blog.
Al final se genera la clase Blog que contiene las variables, ademas de las funciones set y get de esas variables, que se van a convertir en una tabla dentro de la base de datos. También un BlogRepository, que es una clase donde se pueden hacer querys personalizados y utilizarlos en diferentes controladores de symfony.
A continuación veamos como se ve el comando en modo interactivo
Welcome to the Doctrine2 entity generator
This command helps you generate Doctrine2 entities.
First, you need to give the entity name you want to generate.
You must use the shortcut notation like AcmeBlogBundle:Post.
The Entity shortcut name: AppBundle:Blog
Determine the format to use for the mapping information.
Configuration format (yml, xml, php, or annotation) [annotation]:
Instead of starting with a blank entity, you can add some fields now.
Note that the primary key will be added automatically (named id).
Available types: array, simple_array, json_array, object,
boolean, integer, smallint, bigint, string, text, datetime, datetimetz,
date, time, decimal, float, binary, blob, guid.
New field name (press <return> to stop adding fields): name
Field type [string]:
Field length [255]:
Is nullable [false]:
Unique [false]:
New field name (press <return> to stop adding fields): user
Field type [string]: integer
Is nullable [false]:
Unique [false]:
New field name (press <return> to stop adding fields):
Entity generation
created ./src/AppBundle/Entity/Blog.php
> Generating entity class src/AppBundle/Entity/Blog.php: OK!
> Generating repository class src/AppBundle/Repository/BlogRepository.php: OK!
Everything is OK! Now get to work :).
2. Crear una migración de la entidad creada.
La siguiente sentencia mapea los cambios realizados dentro de una entity para genera una nueva migración con sentencias SQL.
Lo que hace este comando es mapear la entidad Blog y buscar lo escrito en la Annotation, que fue el formato que se eligió, y a partir de ahí crear sentencias SQL para ejecutar dentro e la base de datos y crear tablas, relaciones o alterar cualquier tabla o campos para agregar lo anotado dentro de la entity.
bin/console doctrine:migrations:diff
NOTA: Es importante mencionar que cada ves que se realice un cambio dentro de la entity, hay que ejecutar este comnando para que haga un mapping de la entity y cree una nueva migracion con dichos cambios.
3. Crear la tabla con la migración creada.
El siguiente comando hará que la entity se convierta en tabla dentro de la base datos que se configuró.
Lo que hace es leer todas las migraciones existente y ejecutarlas dentro de la base de datos. y si esta ya ha sido ejecutada, no hara ningun cambio, solo si hay una nueva migracion existente.
bin/console doctrine:migrations:migrate
NOTA: Si la base de datos no tiene ningún registro y la aplicación de symfony ya tiene algunas migraciones hechas por otras personas, lo recomendable es ejecutar este comando de primero ( migrate ) para que se realice los cambios en la base de datos y después el comando doctrine:migrations:diff si existe un cambio dentro de las entities, debido a que si ejecutar el comando diff primero, realizara una migración de todas la entities ya creadas y habrá redundancia de migraciones.
En la siguiente imagen se muestra la tabla en la base de datos.
Espero que les haya sido de ayuda.