Cosa sono le migration
Le migration sono una sorta di controllo di versione del database. Consentono al team di condividere e gestire le definizioni dello schema del database dell’applicazione. Avrai vissuto situazioni in cui, dopo aver fatto pull del codice, dovevi comunicare al team “aggiungete manualmente questa colonna al vostro database locale”. Le migration risolvono questo problema. I file di migration sono conservati nella directorydatabase/migrations.
Ciascun nome file contiene un timestamp usato da Laravel per determinare l’ordine di esecuzione.
Creazione di un file di migration
Con il comando Artisanmake:migration generi un nuovo file di migration.
create_posts_table, viene già preparato il codice che crea la tabella posts.
Struttura di una migration
La classe di migration ha due metodi:up e down.
- Metodo
up: aggiunge tabelle, colonne e indici al database. - Metodo
down: annulla le operazioni diup. Viene invocato durante il rollback.
Principali metodi per definire le colonne
La classeBlueprint mette a disposizione molti tipi di colonna.
| Metodo | Descrizione |
|---|---|
$table->id() | Chiave primaria auto-incrementale (alias di bigIncrements('id')) |
$table->string('name') | Colonna equivalente a VARCHAR (default 255 caratteri) |
$table->text('body') | Colonna TEXT |
$table->integer('count') | Colonna INTEGER |
$table->boolean('active') | Booleano memorizzato come TINYINT |
$table->timestamp('published_at') | Colonna TIMESTAMP |
$table->timestamps() | Aggiunge insieme created_at e updated_at |
$table->softDeletes() | Aggiunge la colonna deleted_at per la soft delete |
$table->foreignId('user_id') | Colonna BIGINT UNSIGNED per chiavi esterne |
Modificatori delle colonne
Nelle definizioni di colonna puoi concatenare modificatori.Esecuzione delle migration
Con il comandomigrate esegui tutte le migration non ancora eseguite.
migrate:status.
Rollback
Per annullare l’ultimo batch di migration usamigrate:rollback.
--step.
migrate:refresh.
migrate:refresh ricrea tutte le tabelle, quindi i dati esistenti vanno persi.
Utile per resettare il database durante lo sviluppo.Esempio pratico: creazione della tabella posts
Vediamo il flusso completo con l’esempio della tabellaposts per gestire i post di un blog.
1. Generazione del file di migration
2. Modifica della migration
Apridatabase/migrations/xxxx_xx_xx_xxxxxx_create_posts_table.php e modificalo.
3. Esecuzione della migration
posts viene creata nel database.
4. Aggiungere una colonna in un secondo momento
Se dopo la creazione della tabella vuoi aggiungere nuove colonne, non modificare la migration esistente: crea una nuova migration.Eventi delle migration
Per ogni operazione di migration viene emesso un evento. Tutti gli eventi ereditano daIlluminate\Database\Events\MigrationEvent.
| Classe | Descrizione |
|---|---|
Illuminate\Database\Events\DatabaseRefreshed | Dopo il completamento del comando migrate:refresh |
Illuminate\Database\Events\MigrationsStarted | Poco prima dell’esecuzione di un batch di migration |
Illuminate\Database\Events\MigrationsEnded | Dopo il completamento di un batch di migration |
Illuminate\Database\Events\MigrationStarted | Poco prima dell’esecuzione di una singola migration |
Illuminate\Database\Events\MigrationEnded | Dopo il completamento di una singola migration |
Illuminate\Database\Events\NoPendingMigrations | Quando il comando di migration rileva che non ci sono migration pendenti |
Illuminate\Database\Events\SchemaDumped | Dopo il completamento del dump dello schema |
Illuminate\Database\Events\SchemaLoaded | Dopo il caricamento di uno schema dump esistente |
MigrationsEnded per svuotare la cache al termine delle migration.
Prossimi passi
Database seeding
Impara come inserire dati di esempio nelle tabelle create con le migration.
Introduzione a Eloquent
Impara come manipolare con Eloquent ORM le tabelle create con le migration.