symfony2 generate consultas symfony doctrine2 database-schema

symfony - generate - Actualización de esquema de Doctrine o migraciones de Doctrine



symfony 3.4 database (3)

¿Cuáles son las ventajas prácticas de Doctrine Migrations sobre simplemente ejecutar una actualización de esquema?

¿La seguridad?

El comando orm:schema-tool:update ( doctrine:schema:update in Symfony) advierte

Esta operación no se debe ejecutar en un entorno de producción.

pero ¿por qué es esto? Claro, puede eliminar datos, pero también puede hacerlo una migración.

¿Flexibilidad?

Pensé que podría adaptar mis migraciones para agregar cosas como los valores predeterminados de las columnas, pero esto a menudo no funciona, ya que Doctrine notará la discrepancia entre el esquema y el código en la siguiente dificultad y pisará los cambios.


Creo que realmente lo has clavado en Seguridad. Con Migrations puede volver a otro estado de la tabla (tal como lo puede hacer en el control de versiones de Git). Con el comando de actualización de esquema, solo puede ACTUALIZAR las tablas. No se guarda ningún registro para volver atrás en caso de falla con los datos ya guardados en esas tablas. No sé exactamente, pero ¿una migración también guarda los datos de la tabla correspondiente que se está actualizando? Eso sería esencial en mi opinión, de lo contrario no hay una razón importante para usarlos.

Entonces sí, personalmente creo que la razón principal para usar migraciones en un entorno de producción es la seguridad y tal vez un poco de flexibilidad. La seguridad sería la ganadora aquí, creo :)

Espero que esto ayude.

editar: Aquí hay otra respuesta con referencias a los documentos de Symfony: ¿Es seguro usar las migraciones de doctrine2 en el entorno de producción con symfony2 y php?


Cuando está utilizando la schema-tool , no se guarda ningún historial de modificación de la base de datos, y en un entorno de producción / almacenamiento intermedio esto representa un gran inconveniente.

Supongamos que tiene una estructura de base de datos complicada en un proyecto en vivo. Y en el próximo conjunto de cambios tiene que alterar la base de datos de alguna manera. Por ejemplo, los teléfonos de contacto de los usuarios deben almacenarse en un formato diferente, no en un VARCHAR , sino en tres columnas SMALLINT para el código de país, el código de área y el número de teléfono.

Bueno, no es tan difícil encontrar una consulta que pueda obtener los datos actuales, separarlos en tres valores e insertarlos de nuevo. Es entonces cuando entran en juego las migraciones: puede crear sus nuevos campos, luego hacer las transformaciones y finalmente dejar caer el campo que contenía los datos antes.

¡Y aún más! Incluso puede describir el proceso hacia atrás (la migración down ), cuando necesita deshacer los cambios introducidos en su migración. Supongamos que alguien en alguna parte se basó en gran medida en el formato del campo VARCHAR , y ahora que ha cambiado la estructura, su fragmento de código no funciona como se esperaba. Entonces, ejecuta migration:down , y todo se revierte. En este caso específico, simplemente volvería a traer la columna VARCHAR y concatenará los valores, y luego soltará los campos.

La herramienta de migración de Doctrine básicamente hace la mayor parte del trabajo por usted. Cuando se difiere su esquema, genera todas las altas y up necesarias, por lo que lo único que tendrá que hacer es manejar los datos que podrían dañarse cuando se aplica la migración.

Además, las migraciones son algo que le informa a otros desarrolladores sobre el conocimiento de su equipo cuándo es el momento de actualizar sus esquemas. Con solo la schema-tool , sus compañeros de equipo tendrían que ejecutar doctrine:schema:update cada vez que lo hagan, porque no sabrían si el esquema realmente ha cambiado.

Al usar migraciones, siempre verá que hay algunas actualizaciones en la carpeta de migraciones, lo que significa que debe actualizar su esquema.


Tampoco puede realizar grandes actualizaciones con la migración de doctrina simple. Como intentar actualizar el índice en la base de datos de 30 millones de usuarios. Como pasará mucho tiempo mientras su aplicación no será accesible.