In questo articolo vedremo come utilizzare alcune delle funzionalità delle migrazioni del framework laravel 10, in particolare
- Configurare una connessione al database;
- Generare il database tramite il comando artisan;
- Creare una nuova migrazione;
- Effettuare l'update dello schema di una determinata tabella;
- Generare il file sql del database.
#Configurare una connessione al database
Per configurare la connessione al nostro database modifichiamo il file config\database.php inserendo i nostri dati, la connessione di default è mysql, modifichiamo i valori database, username, password con quelli della nostra connessione al database, ad esempio nel mio caso
<?php
/** config\database.php */
........................
........................
........................
return [
"default" => env("DB_CONNECTION", "mysql"),
"mysql" => [
"driver" => "mysql",
"url" => env("DATABASE_URL"),
"host" => env("DB_HOST", "127.0.0.1"),
"port" => env("DB_PORT", "3306"),
"database" => env("DB_DATABASE", "laravel"),
"username" => env("DB_USERNAME", "root"),
"password" => env("DB_PASSWORD", ""),
"unix_socket" => env("DB_SOCKET", ""),
"charset" => "utf8mb4",
"collation" => "utf8mb4_unicode_ci",
"prefix" => "",
"prefix_indexes" => true,
"strict" => true,
"engine" => null,
"options" => extension_loaded("pdo_mysql")
? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env("MYSQL_ATTR_SSL_CA"),
])
: [],
],
];
laravel è il nome del database, root è l'utente e password nessuna poichè sto lavorando in modalità sviluppo.
#Generare il database tramite il comando artisan
Nell'applicazione di default di laravel 10 sono già incluse delle migrazioni nella cartella database\migrations
- 2014_10_12_000000_create_users_table.php
- 2014_10_12_100000_create_password_reset_tokens_table.php
- 2019_08_19_000000_create_failed_jobs_table.php
- 2019_12_14_000001_create_personal_access_tokens_table.php
ad esempio la migrazione create_users_table è simile a questa
<?php
/** 2014_10_12_000000_create_users_table.php */
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create("users", function (Blueprint $table) {
$table->id();
$table->string("name");
$table->string("email")->unique();
$table->timestamp("email_verified_at")->nullable();
$table->string("password");
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists("users");
}
};
in questo file sono definite le colonne della tabella users, che sono id, name, email, email_verified_at, password, remember_token, in particolare
- $table->timestamps();
genera le colonne created_at e updated_at.
Adesso da CLI lanciamo il comando
$ php artisan migrate
verranno generate nel nostro database le tabelle users, password_reset_tokens, failed_jobs, personal_access_tokens e la tabella migrations dove vengono memorizzate tutte le migrazioni.
Per annullare l'ultima operazione di migrazione si usa il comando
$ php artisan migrate:rollback
è anche possibile specificare il numero delle ultime migrazioni da annullare, ad esempio
$ php artisan migrate:rollback --step=4
annulla le ultime 4 migrazioni.
#Creare una nuova migrazione
Per generare una nuova migrazione si usa il comando make:migration, ad esempio se vogliamo generare una migrazione per una tabella denominata flights si usa il seguente comando
$ php artisan make:migration create_flights_table
questo comando genera una migrazione simile a questa
<?php
/** 2024_03_09_000000_create_flights_table.php */
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create("flights", function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists("flights");
}
};
cioè è lo schema di una tabella flights con le colonne id, created_at e updated_at, se lanciamo di nuovo il comando migrate
$ php artisan migrate
INFO Running migrations.
2024_03_09_000000_create_flights_table ............... 23ms DONE
verrà generata la nuova tabella flights.
#Effettuare l'update dello schema di una determinata tabella
Vediamo adesso come apportare aggiornamenti ad una specifica tabella, ad esempio vogliamo aggiungere alla tabella users la colonna phonenumber, quindi creiamo una nuova migrazione tramite il seguente comando specificando il nome della tabella (--table=users)
$ php artisan make:migration add_phone_number_to_users_table --table=users
questo genera una nuova migrazione nella cartella database\migrations simile a questa
<?php
/** 2024_03_09_130938_add_phone_number_to_users_table.php */
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table("users", function (Blueprint $table) {
//
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table("users", function (Blueprint $table) {
//
});
}
};
modifichiamo questo file in modo che venga aggiunta la colonna phonenumber alla tabella users
<?php
/** 2024_03_09_130938_add_phone_number_to_users_table.php */
........................
........................
........................
return new class extends Migration
{
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->string('phonenumber')->after('name');
});
}
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('phonenumber');
});
}
};
se adesso lanciamo il comando migrate verrà aggiunata la nuova colonna phonenumber dopo la colonna name ( ->after('name')) alla tabella users
$ php artisan migrate
INFO Running migrations.
2024_03_09_130938_add_phone_number_to_users_table ............... 38ms DONE
#Generare il file sql del database
Infine per generare il file sql dell'intero database bisogna usare il seguente comando
$ php artisan schema:dump
questo genera un file mysql-schema.sql nella cartella database\schema, per quanto riguarda questo comando per eliminare tutte le migrazioni esistenti qual'ora ne fossero diventate troppe, si usa il comando
$ php artisan schema:dump --prune