vapor-docs/docs/fluent/migration.es.md

97 lines
3.4 KiB
Markdown

# Migraciones
Las migraciones son una especie de control de versiones para tu base de datos. Cada migración define un cambio en la base de datos y cómo deshacerlo. Modificando tu base de datos mediante migraciones creas una manera consistente, testable y fácil de compartir, de evolucionar tu base de datos a lo largo del tiempo.
```swift
// Una migración de ejemplo.
struct MyMigration: Migration {
func prepare(on database: Database) -> EventLoopFuture<Void> {
// Haz un cambio en la base de datos.
}
func revert(on database: Database) -> EventLoopFuture<Void> {
// Deshaz el cambio hecho en `prepare`, si es posible.
}
}
```
Si estás usando `async`/`await` deberías implementar el protocolo `AsyncMigration`:
```swift
struct MyMigration: AsyncMigration {
func prepare(on database: Database) async throws {
// Haz un cambio en la base de datos.
}
func revert(on database: Database) async throws {
// Deshaz el cambio hecho en `prepare`, si es posible.
}
}
```
En el método `prepare` haces cambios en la `Database` proporcionada. Pueden ser cambios en el esquema de la base de datos, como añadir o quitar una tabla, colección, campo o restricción. También pueden modificar el contenido de la base de datos, por ejemplo creando una nueva instancia de un modelo, actualizando valores de campos o haciendo una limpieza general.
En el método `revert` deshaces estos cambios, siempre y cuando sea posible. Tener la capacidad de deshacer migraciones puede facilitar el prototipado y el testing. También te ofrece un plan de recuperación si un despliegue en producción no marcha según lo planeado.
## Registro
Las migraciones son registradas en tu aplicación usando `app.migrations`.
```swift
import Fluent
import Vapor
app.migrations.add(MyMigration())
```
Puedes añadir una migración a una base de datos específica mediante el parámetro `to`, sino se usará la base de datos por defecto.
```swift
app.migrations.add(MyMigration(), to: .myDatabase)
```
Las migraciones deberían estar listadas según el orden de dependencia. Por ejemplo, si `MigrationB` depende de `MigrationA`, debería añadirse a `app.migrations` la segunda.
## Migrar
Para migrar tu base de datos, ejecuta el comando `migrate`.
```sh
swift run App migrate
```
También puedes ejecutar este [comando desde Xcode](../advanced/commands.md#xcode). El comando de migración comprobará la base de datos para ver si se han registrado nuevas migraciones desde la última ejecución. Si hay nuevas migraciones pedirá confirmación antes de ejecutarlas.
### Revertir
Para deshacer una migración en tu base de datos, ejecuta `migrate` con la marca `--revert`.
```sh
swift run App migrate --revert
```
El comando comprobará la base de datos para ver que conjunto de migraciones fue ejecutado la vez anterior y pedirá confirmación antes de revertirlas.
### Migración Automática
Si quieres que tus migraciones se ejecuten automáticamente antes de ejecutar otros comandos, añade la marca `--auto-migrate`.
```sh
swift run App serve --auto-migrate
```
También puedes hacerlo de manera programática.
```swift
try app.autoMigrate().wait()
// o
try await app.autoMigrate()
```
Ambas opciones también exiten para revertir: `--auto-revert` y `app.autoRevert()`.
## Próximos Pasos
Echa un vistazo a las guías de [schema builder](schema.md) y [query builder](query.md) para más información acerca de qué poner dentro de tus migraciones.