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

97 lines
3.4 KiB
Markdown

# Migrazioni
Le migrazioni sono come un sistema di controllo versione per il tuo database. Ogni migrazione definisce un cambiamento al database e come disfarlo. Utilizzando le migrazioni per applicare modifiche al database, stabilisci un approccio coeso, testabile, e condivisibile per evolvere nel tempo i tuoi database.
```swift
// Un esempio di migrazione.
struct MyMigration: Migration {
func prepare(on database: any Database) -> EventLoopFuture<Void> {
// Fai una modifica al database.
}
func revert(on database: any Database) -> EventLoopFuture<Void> {
// Disfai le modifiche fatte in `prepare`, se possibile.
}
}
```
Se usi `async`/`await` devi implementare il protocollo `AsyncMigration`:
```swift
struct MyMigration: AsyncMigration {
func prepare(on database: any Database) async throws {
// Fai una modifica al database.
}
func revert(on database: any Database) async throws {
// Disfai le modifiche fatte in `prepare`, se possibile.
}
}
```
Il metodo `prepare` è dove fai le modifiche al `Database` fornito. Potrebbero essere modifiche allo schema del database come aggiungere o rimuovere una relazione o una collezione, attributo, o vincolo. Possono anche modificare il contenuto del database, come creare nuove istanze del modello, aggiornare valori di un attributo, o fare pulizia.
Il metodo `revert` è dove disfai queste modifiche, se possibile. Essere in grado di disfare le migrazioni può rendere la prototipazione e il testing più facili. Forniscono anche un piano di backup se un deploy in produzione non va come pianificato.
## Registra
Le migrazioni vengono registrate alla tua applicazione usando `app.migrations`.
```swift
import Fluent
import Vapor
app.migrations.add(MyMigration())
```
Puoi aggiungere una migrazione a un database specifico usando il parametro `to`, altrimenti sarà utilizzato il database di default.
```swift
app.migrations.add(MyMigration(), to: .myDatabase)
```
Le migrazioni dovrebbero essere listate in ordine di dipendenza. Per esempio, se `MigrationB` dipende da `MigrationA`, deve essere aggiunto a `app.migrations` per secondo.
## Migra
Per migrare il tuo database, esegui il comando `migrate`.
```sh
swift run App migrate
```
Puoi anche eseguire questo [comando attraverso Xcode](../advanced/commands.md#xcode). Il comando di migrazione controllerà il database per vedere se sono state registrate nuove migrazioni dall'ultima volta in cui è stato eseguito. Se ci sono nuove migrazioni, chiederà una conferma prima di eseguirle.
### Ripristinare
Per disfare una migrazione sul tuo database, esegui `migrate` con la flag `--revert`.
```sh
swift run App migrate --revert
```
Il comando controllerà il database per vedere quale gruppo di migrazioni è stato eseguito per ultimo e chiederà conferma prima di ripristinarle.
### Migra Automaticamente
Se vuoi che le migrazioni vengano eseguite automaticamente prima degli altri comandi, puoi passare la flag `--auto-migrate`.
```sh
swift run App serve --auto-migrate
```
Puoi farlo anche programmaticamente.
```swift
try app.autoMigrate().wait()
// oppure
try await app.autoMigrate()
```
Entrambe queste opzioni esistono anche per ripristinare: `--auto-revert` e `app.autoRevert()`.
## Prossimi Passi
Per avere più informazioni riguardo a cosa mettere dentro le tue migrazioni, consulta le guide per [costruire gli schemi](schema.md) e per [costruire le query](query.md).