Skip to main content

Wat zijn migraties

Migraties zijn een soort versiebeheer voor je database. Ze stellen een team in staat om de definitie van het databaseschema van de applicatie te delen en te beheren. Je hebt vast weleens meegemaakt dat je na het pullen van de broncode aan teamleden moest vertellen: “voeg handmatig een kolom toe aan je lokale database”. Migraties lossen dat probleem op. Migratiebestanden staan in de directory database/migrations. Elke bestandsnaam bevat een timestamp die Laravel gebruikt om de uitvoeringsvolgorde van de migraties te bepalen.

Een migratiebestand aanmaken

Met het Artisan-commando make:migration genereer je een nieuw migratiebestand.
Laravel leidt uit de migratienaam de tabelnaam af en genereert een passende stub. Heet de migratie create_posts_table, dan staat de code om de tabel posts aan te maken al voor je klaar.

De structuur van een migratie

Een migratieklasse heeft twee methoden: up en down.
  • De up-methode: voegt tabellen, kolommen en indexen toe aan de database.
  • De down-methode: maakt de bewerkingen van up ongedaan. Wordt aangeroepen bij een rollback.

De belangrijkste kolomdefinitiemethoden

De Blueprint-klasse biedt een groot aantal kolomtypen.

Kolommodifiers

Aan kolomdefinities voeg je modifiers toe via een methodchain.

Vectorkolommen en -indexen

De methode vector maakt een vector-kolom voor het opslaan van embeddingvectoren. Stel dimensions in op de uitvoerdimensie van de embeddingprovider die je gebruikt.
Vectorkolommen zijn beschikbaar op PostgreSQL-verbindingen met de pgvector-extensie en op MariaDB 11.7 of nieuwer. Activeer op PostgreSQL pgvector voordat je een vectorkolom aanmaakt.
Om zoekopdrachten op vectorgelijkenis te versnellen, voeg je een index toe aan de vector-kolom. Deze index gebruikt de cosinusafstand.
Gebruik dropVectorIndex om een bestaande vectorindex te verwijderen.

Online index aanmaken

Wanneer je een index aanmaakt op een grote tabel, wordt de tabel meestal vergrendeld terwijl de index wordt opgebouwd, waardoor lees- en schrijfacties moeten wachten. In MySQL kun je met de inplace-modifier op een index- of foreign key-definitie de bewerking uitvoeren met het INPLACE-algoritme.
Combineer inplace met de lock-modifier om het tabellenslot tijdens de bewerking te bepalen. Met none blijven lezen en schrijven mogelijk voor bewerkingen die MySQL toestaat.
Deze functionaliteit is MySQL-specifiek. Controleer in de documentatie voor online DDL-bewerkingen van MySQL of de bewerking die je uitvoert het INPLACE-algoritme en de opgegeven lock-modus ondersteunt. Om inplace te gebruiken bij foreign key-bewerkingen, moet je eerst de foreign key-constraints uitschakelen.

Migraties uitvoeren

Met het commando migrate voer je alle nog niet uitgevoerde migraties uit.
Om te zien welke migraties al zijn uitgevoerd en welke nog niet, gebruik je migrate:status.
Voer je migraties uit in productie, dan verschijnt er een bevestigingsprompt. Wil je zonder bevestiging uitvoeren, gebruik dan de flag --force — maar wees voorzichtig, want sommige bewerkingen kunnen data laten verdwijnen.

Rollback

Om de laatste batch migraties terug te draaien gebruik je migrate:rollback.
Wil je een specifiek aantal stappen terugdraaien, geef dan de optie --step op.
Om alle migraties terug te draaien en daarna opnieuw uit te voeren gebruik je migrate:refresh.
migrate:refresh bouwt alle tabellen opnieuw op, waardoor bestaande data verloren gaat. Handig om de database tijdens de ontwikkeling te resetten.

Praktijkvoorbeeld: de posts-tabel aanmaken

Aan de hand van een posts-tabel voor blogposts lopen we het hele proces door.

1. Het migratiebestand genereren

2. De migratie bewerken

Open en bewerk database/migrations/xxxx_xx_xx_xxxxxx_create_posts_table.php.

3. De migratie uitvoeren

Na uitvoering is de tabel posts in de database aangemaakt.

4. Later een kolom toevoegen

Wil je na het aanmaken van de tabel een nieuwe kolom toevoegen, bewerk dan niet de bestaande migratie, maar maak een nieuwe migratie aan.
Vermijd het direct bewerken van bestaande migratiebestanden. Dat verstoort de consistentie met andere teamleden en de productieomgeving. Voeg wijzigingen altijd toe als nieuwe migratie.

Migratie-events

Bij elke migratiebewerking worden events uitgezonden. Alle events erven over van Illuminate\Database\Events\MigrationEvent. Je kunt bijvoorbeeld luisteren naar het event MigrationsEnded en na afronding van de migraties de cache legen.

Volgende stappen

Databaseseeding

Leer hoe je voorbeelddata plaatst in de tabellen die je met migraties hebt aangemaakt.

Introductie tot Eloquent

Leer hoe je de tabellen die je met migraties hebt aangemaakt bewerkt met de Eloquent ORM.
Laatst gewijzigd op 22 september 2026