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 directorydatabase/migrations.
Elke bestandsnaam bevat een timestamp die Laravel gebruikt om de uitvoeringsvolgorde van de migraties te bepalen.
Een migratiebestand aanmaken
Met het Artisan-commandomake:migration genereer je een nieuw migratiebestand.
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 vanupongedaan. Wordt aangeroepen bij een rollback.
De belangrijkste kolomdefinitiemethoden
DeBlueprint-klasse biedt een groot aantal kolomtypen.
Kolommodifiers
Aan kolomdefinities voeg je modifiers toe via een methodchain.Vectorkolommen en -indexen
De methodevector maakt een vector-kolom voor het opslaan van embeddingvectoren. Stel dimensions in op de uitvoerdimensie van de embeddingprovider die je gebruikt.
pgvector-extensie en op MariaDB 11.7 of nieuwer. Activeer op PostgreSQL pgvector voordat je een vectorkolom aanmaakt.
index toe aan de vector-kolom. Deze index gebruikt de cosinusafstand.
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 deinplace-modifier op een index- of foreign key-definitie de bewerking uitvoeren met het INPLACE-algoritme.
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.
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 commandomigrate voer je alle nog niet uitgevoerde migraties uit.
migrate:status.
Rollback
Om de laatste batch migraties terug te draaien gebruik jemigrate:rollback.
--step op.
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 eenposts-tabel voor blogposts lopen we het hele proces door.
1. Het migratiebestand genereren
2. De migratie bewerken
Open en bewerkdatabase/migrations/xxxx_xx_xx_xxxxxx_create_posts_table.php.
3. De migratie uitvoeren
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.Migratie-events
Bij elke migratiebewerking worden events uitgezonden. Alle events erven over vanIlluminate\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.