Migraties¶
Migraties zijn als een versiebeheersysteem voor uw database. Elke migratie definieert een wijziging aan de database en hoe deze ongedaan te maken. Door uw database aan te passen via migraties, creëert u een consistente, testbare en deelbare manier om uw databases in de loop van de tijd te laten evolueren.
// Een voorbeeld migratie.
struct MyMigration: Migration {
func prepare(on database: Database) -> EventLoopFuture<Void> {
// Breng een wijziging aan in de database.
}
func revert(on database: Database) -> EventLoopFuture<Void> {
// Maak de verandering in `prepare` ongedaan, indien mogelijk.
}
}
Als je async
/await
gebruikt moet je het AsyncMigration
protocol implementeren:
struct MyMigration: AsyncMigration {
func prepare(on database: Database) async throws {
// Breng een wijziging aan in de database.
}
func revert(on database: Database) async throws {
// Maak de verandering in `prepare` ongedaan, indien mogelijk.
}
}
De prepare
methode is waar je wijzigingen aanbrengt in de aangeleverde Database
. Dit kunnen wijzigingen zijn aan het database schema, zoals het toevoegen of verwijderen van een tabel of collectie, veld, of constraint. Ze kunnen ook de inhoud van de database wijzigen, zoals het creëren van nieuwe modelinstanties, het bijwerken van veldwaarden, of het opschonen van de database.
De revert
methode is waar je deze veranderingen ongedaan maakt, indien mogelijk. De mogelijkheid om migraties ongedaan te maken kan prototyping en testen makkelijker maken. Het geeft je ook een backup plan als een deploy naar productie niet gaat zoals gepland.
Registreren¶
Migraties worden geregistreerd in uw applicatie met app.migrations
.
import Fluent
import Vapor
app.migrations.add(MyMigration())
U kunt een migratie naar een specifieke database toevoegen met de naar
parameter, anders wordt de standaard database gebruikt.
app.migrations.add(MyMigration(), to: .myDatabase)
Migraties moeten worden vermeld in volgorde van afhankelijkheid. Bijvoorbeeld, als MigratieB
afhankelijk is van MigratieA
, moet deze als tweede aan app.migrations
worden toegevoegd.
Migreren¶
Om uw database te migreren, voert u het migrate
commando uit.
swift run App migrate
Je kunt ook dit [commando via Xcode] uitvoeren(../advanced/commands.md#xcode). Het migrate commando controleert de database om te zien of er nieuwe migraties zijn geregistreerd sinds de laatste keer dat het commando werd uitgevoerd. Als er nieuwe migraties zijn, vraagt het om een bevestiging voordat het wordt uitgevoerd.
Ongedaan Maken¶
Om een migratie op uw database ongedaan te maken, voert u migrate
uit met de --revert
vlag.
swift run App migrate --revert
Het commando controleert de database om te zien welke batch van migraties het laatst is uitgevoerd en vraagt om een bevestiging voordat ze worden teruggedraaid.
Auto Migrate¶
Als u wilt dat migraties automatisch worden uitgevoerd voordat andere commando's worden uitgevoerd, kunt u de --auto-migrate
vlag meegeven.
swift run App serve --auto-migrate
U kunt dit ook programmatisch doen.
try app.autoMigrate().wait()
// of
try await app.autoMigrate()
Beide opties bestaan ook om terug te draaien: --auto-revert
en app.autoRevert()
.
Volgende Stappen¶
Kijk eens naar de schema builder en query builder gidsen voor meer informatie over wat je in je migraties moet zetten.