Ritorniamo con le nostre fantastiche guide Laravel, oggi andiamo a parlare di Migration e iniziamo a vedere alcune cose che vi torneranno utili nei vostri progetti di sviluppo con Laravel.

Laravel Migration

La “migration” è una classe speciale che contiene un insieme di azioni da eseguire sul database, come la creazione o la modifica di una tabella di database. Le migrazioni assicurano che il database venga impostato in modo identico ogni volta che si crea una nuova istanza della web app, ad esempio l’installazione in produzione o sulla macchina di sviluppo di uno sviluppatore che partecipa al progetto.

Dunque, le “migration” potrebbero essere considerate come un versionamento del database dell’applicazione.

Per creare una “migration” si usa nel terminale il seguente comando Artisan:

php artisan make:migration create_ordini_table

La nuova “migration” dichiara una classe che estende la classe base Migration. Inoltre, contiene i seguenti due metodi. Eseguendo il comando, la “migration” sarà inserita nella directory “database/migrations”. Ogni “migration” ha un nome che contiene un timestamp che permette a Laravel di individuare l’ordine delle “migrations” (2019_03_28_150229_create_ordini_table.php).

  1. up(): questo metodo permette di aggiungere una nuova tabella, aggiungere nuove colonne o nuovi indici al database;
  2. down(): questo metodo permette di eliminare le precedenti modifiche.

Quindi la “migration” avrà la seguente struttura:

<?php

use Illuminate\Support\Facades\Schema;

use Illuminate\Database\Schema\Blueprint;

use Illuminate\Database\Migrations\Migration;

class CreateOrdiniTable extends Migration

{

  public function up()

  {

    //

  }

  public function down()

  {

    //

  }

}

Nell’esempio l’obiettivo è di creare la tabella Ordini. Utilizzando il metodo create() (che è una Facade di Schema) si può inserire all’interno di up() e di down() il seguente codice:

<?php

use Illuminate\Support\Facades\Schema;

use Illuminate\Database\Schema\Blueprint;

use Illuminate\Database\Migrations\Migration;

class CreateOrdiniTable extends Migration

{

  public function up()

  {

    Schema::create('ordini', function (Blueprint $table) {

            $table->increments('id');
            $table->string('prodotto');
            $table->integer('quantita');
            $table->timestamps();
    });
}

public function down()

  {

    Schema::drop(‘ordini’);

  }

}

Per creare la tabella “ordini” nel database bisogna eseguire il seguente comando Artisan:

php artisan migrate

“id” di tipo auto-increment, unsigned e primary key. La tabella creata avrà le seguenti colonne:

  1. “prodotto” di tipo varchar
  2. “quantita” di tipo integer
  3. “created_at” e “update_at” (colonne create utilizzando il metodo timestamps()) di tipo timestamp.

Dopo aver creato la tabella con il precedente comando Artisan è possibile eseguire il rollback dell’ultima operazione di migrazione con il seguente comando:

php artisan migrate:rollback

E’ possibile anche effettuare un rollback di tutte le migrazioni effettuate con il seguente comando Artisan:

php artisan migrate:reset

Se, per esempio, dovesse nascere l’esigenza di aggiungere delle colonne alla tabella precedentemente creata possiamo rieseguire il comando Artisan per la creazione della migration:

php artisan make:migration add_ordini_column

Il file creato avrà sempre i metodi up() e down() nei quali si può inserire il seguente codice:

[...]
public function up()
{
        Schema::table('ordini', function (Blueprint $table) {
            $table->string('num_ordine');
            $table->date('data_ordine');
        });
}

public function down()
{
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('votes');
        });
}

Per aggiungere le due colonne alla tabella basta lanciare nuovamente il comando Artisan:

php artisan migrate

Stai cercando un corso Laravel per la tua azienda? Oppure sei alla ricerca di un lezione privata o di un corso Laravel a catalogo? Rivolgiti a LaraMind, gli esperti Laravel in Italia, per qualsiasi domanda scrivici a amministrazione@laramind.com