Ricerca…
migrazioni
Per controllare il tuo database in Laravel è usando le migrazioni. Crea migrazione con artigiano:
php artisan make:migration create_first_table --create=first_table
Questo genererà la classe CreateFirstTable. All'interno del metodo up puoi creare le tue colonne:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateFirstTable extends Migration
{
public function up()
{
Schema::create('first_table', function (Blueprint $table) {
$table->increments('id');
$table->string('first_string_column_name');
$table->integer('secont_integer_column_name');
$table->timestamps();
});
}
public function down()
{
Schema::drop('first_table');
}
}
Alla fine di eseguire tutte le classi di migrazione è possibile eseguire il comando artisan:
php artisan migrate
Questo creerà le tue tabelle e le tue colonne nel tuo database. Altri comandi di migrazione utili sono:
-
php artisan migrate:rollback
- Rollback l'ultima migrazione del database -
php artisan migrate:reset
- Ripristina tutte le migrazioni di database -
php artisan migrate:refresh
- Reimposta e riesegui tutte le migrazioni -
php artisan migrate:status
: mostra lo stato di ciascuna migrazione
Modifica delle tabelle esistenti
A volte, è necessario modificare la struttura della tabella esistente come renaming/deleting
colonne. Che puoi realizzare creando una nuova migrazione. E nel metodo up
della tua migrazione.
//Renaming Column.
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('email', 'username');
});
}
L'esempio sopra ridenomina la email column
della users table
al username
. Mentre il codice sottostante rilascia un username
colonna dalla tabella degli users
.
IMPROTANT: per modificare le colonne è necessario aggiungere la dipendenza doctrine/dbal
al file composer.json
del progetto ed eseguire l' composer update
per riflettere le modifiche.
//Droping Column
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('username');
});
}
I file di migrazione
Le migrazioni in un'applicazione Laravel 5 risiedono nella directory database/migrations
. I loro nomi di file sono conformi a un formato particolare:
<year>_<month>_<day>_<hour><minute><second>_<name>.php
Un file di migrazione dovrebbe rappresentare un aggiornamento dello schema per risolvere un particolare problema. Per esempio:
2016_07_21_134310_add_last_logged_in_to_users_table.php
Le migrazioni dei database sono mantenute in ordine cronologico in modo che Laravel sappia in quale ordine eseguirle. Laravel eseguirà sempre le migrazioni dal più vecchio al più recente.
Generazione di file di migrazione
Creare un nuovo file di migrazione con il nome file corretto ogni volta che è necessario modificare lo schema sarebbe un lavoro ingrato. Per fortuna, il comando artisan
di Laravel può generare la migrazione per voi:
php artisan make:migration add_last_logged_in_to_users_table
È inoltre possibile utilizzare le --table
e --create
bandiere con il comando precedente. Questi sono opzionali e solo per comodità e inseriranno il codice boilerplate pertinente nel file di migrazione.
php artisan make:migration add_last_logged_in_to_users_table --table=users
php artisan make:migration create_logs_table --create=logs
È possibile specificare un percorso di output personalizzato per la migrazione generata utilizzando l'opzione --path
. Il percorso è relativo al percorso di base dell'applicazione.
php artisan make:migration --path=app/Modules/User/Migrations
All'interno di una migrazione del database
Ogni migrazione dovrebbe avere un metodo up()
e un metodo down()
. Lo scopo del metodo up()
è eseguire le operazioni richieste per mettere lo schema del database nel suo nuovo stato, e lo scopo del metodo down()
è di invertire qualsiasi operazione eseguita dal metodo up()
. Garantire che il metodo down()
annulli correttamente le operazioni è fondamentale per poter ripristinare le modifiche dello schema del database.
Un esempio di file di migrazione potrebbe essere simile a questo:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddLastLoggedInToUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->dateTime('last_logged_in')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('last_logged_in');
});
}
}
Durante l'esecuzione di questa migrazione, Laravel genererà il seguente SQL da eseguire sul tuo database:
ALTER TABLE `users` ADD `last_logged_in` DATETIME NULL
Esecuzione di migrazioni
Una volta scritta la migrazione, eseguendola verranno applicate le operazioni al database.
php artisan migrate
Se tutto è andato bene, vedrai un risultato simile al seguente:
Migrated: 2016_07_21_134310_add_last_logged_in_to_users_table
Laravel è abbastanza intelligente da sapere quando esegui migrazioni nell'ambiente di produzione. Se rileva che stai eseguendo una migrazione distruttiva (ad esempio, una che rimuove una colonna da una tabella), il comando php artisan migrate
ti chiederà conferma. In ambienti di consegna continua questo potrebbe non essere desiderato. In tal caso, usa il flag --force
per saltare la conferma:
php artisan migrate --force
Se hai appena eseguito le migrazioni, potresti essere confuso nel vedere la presenza di una tabella delle migrations
nel tuo database. Questa tabella è ciò che Laravel utilizza per tenere traccia di ciò che le migrazioni sono già state eseguite. Quando si esegue il comando migrate
, Laravel determinerà quali migrazioni devono ancora essere eseguite, quindi le eseguirà in ordine cronologico, quindi aggiornerà la tabella delle migrations
in base alle esigenze.
Non dovresti mai modificare manualmente la tabella delle migrations
meno che tu non sappia assolutamente cosa stai facendo. È molto facile lasciare inavvertitamente il database in uno stato di errore in cui le migrazioni falliscono.
Rolling Back Migrations
Che cosa succede se si desidera eseguire il rollback dell'ultima migrazione, ad esempio un'operazione recente, è possibile utilizzare il comando di rollback
fantastico. Ma ricorda che questo comando ripristina solo l'ultima migrazione, che può includere più file di migrazione
php artisan migrate:rollback
Se sei interessato a ripristinare tutte le migrazioni delle applicazioni, puoi utilizzare il seguente comando
php artisan migrate:reset
Inoltre se sei pigro come me e vuoi eseguire il rollback e migrare con un solo comando, puoi usare questo comando
php artisan migrate:refresh
php artisan migrate:refresh --seed
È anche possibile specificare il numero di passaggi per il rollback con l'opzione step
. In questo modo verrà eseguito il rollback di 1 passaggio.
php artisan migrate:rollback --step=1