Le migrazioni in Laravel sono un elemento cruciale nella gestione della struttura del database, fornendo una sorta di controllo di versione che facilita la modifica e la condivisione dello schema del database dell'applicazione. In questa guida, esploreremo dettagliatamente il processo di generazione, esecuzione e rollback delle migrazioni, utilizzando il potente Schema Builder di Laravel.
Generazione di Migrazioni
Per creare una migrazione, si utilizza il comando Artisan make:migration
. Ad esempio, per creare una tabella degli utenti, esegui il seguente comando:
php artisan make:migration create_users_table
Questo genererà un file di migrazione nel percorso database/migrations
, con un timestamp nel nome per determinare l'ordine delle migrazioni.
Struttura delle Migrazioni
Una classe di migrazione contiene due metodi principali: up
e down
. Il metodo up
viene utilizzato per aggiungere nuove tabelle, colonne o indici al database, mentre il metodo down
dovrebbe annullare le operazioni eseguite da up
.
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateFlightsTable extends Migration {
public function up() {
Schema::create('flights', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('airline');
$table->timestamps();
});
}
public function down() {
Schema::drop('flights');
}
}
Esecuzione delle Migrazioni
Per eseguire tutte le migrazioni in sospeso, usa il comando Artisan migrate
:
php artisan migrate
È possibile forzare l'esecuzione in produzione utilizzando l'opzione --force
.
Rollback delle Migrazioni
Per eseguire il rollback dell'ultima migrazione, usa il comando migrate:rollback
. Per eseguire il rollback di un numero specifico di migrazioni, utilizza l'opzione --step
.
php artisan migrate:rollback --step=5
Creazione di Tabelle
Per creare una nuova tabella, utilizza il metodo create
sulla facciata Schema. Puoi definire le colonne utilizzando i vari metodi disponibili nel costruttore Blueprint.
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
});
Creazione di Colonne
Il metodo table
sulla facciata Schema può essere utilizzato per aggiornare tabelle esistenti aggiungendo colonne. Utilizza i metodi di colonna disponibili per definire le colonne.
Schema::table('users', function (Blueprint $table) {
$table->string('email');
});
Tipi di Colonne Disponibili
Laravel supporta una varietà di tipi di colonne, come stringhe, interi, booleani, date, ecc. Ad esempio:
$table->string('name');
$table->integer('votes');
$table->boolean('confirmed');
$table->date('created_at');
// ... e molti altri
Modificatori di Colonne
Oltre ai tipi di colonne, ci sono vari "modificatori" che è possibile utilizzare durante l'aggiunta di una colonna. Ad esempio, per rendere la colonna "nullable", usa il metodo nullable
.
Schema::table('users', function (Blueprint $table) {
$table->string('email')->nullable();
});
Modifica delle Colonne
Il metodo change
consente di modificare alcuni tipi di colonne esistenti. Ad esempio, per aumentare la dimensione di una colonna stringa:
Schema::table('users', function (Blueprint $table) {
$table->string('name', 50)->change();
});
Rinomina delle Colonne
Per rinominare una colonna, utilizza il metodo renameColumn
:
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('old_name', 'new_name');
});
Rimozione di Colonne
Per rimuovere una colonna, utilizza il metodo dropColumn
:
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('votes');
});
Creazione di Indici
Laravel supporta diversi tipi di indici, come indici univoci e indici composti. Puoi definire un indice durante la creazione della colonna o successivamente utilizzando i metodi unique
e index
.
$table->string('email')->unique();
$table->index(['account_id', 'created_at']);
Vincoli di Chiave Esterna
Laravel supporta i vincoli di chiave esterna per garantire l'integrità referenziale del database. Ad esempio:
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
Questa guida copre in dettaglio il processo di migrazione con Laravel, dall'inizio alla fine. Utilizzando saggiamente le migrazioni e il potente Schema Builder, puoi mantenere facilmente la struttura del database della tua applicazione. Segui attentamente ogni passaggio per assicurarti un ambiente database coerente e ben strutturato.