In un post precedente abbiamo configurato il database per l’ambiente localhost.

A questo punto siamo pronti per fare le prime prove con il database di Laravel.

Per creare la struttura di un database non utilizziamo query sql ma una classe php apposita. La classe Schema permette di effettuare una serie di operazioni comuni sulle tabelle, come ad esempio, la creazione, modifica aggiornamento di tabelle e colonne.

Inizialmente vedremo i metodi più importanti di Schema utilizzando singole rotte, giusto per dimostrarne il funzionamento. In un secondo momento codice verrà inserito in script, chiamati migrations che verranno lanciati da terminale con un apposito comando.

Creare nuove tabelle

Utilizziamo il metodo Schema::create() dove il primo parametro è il nome della tabella mentre il secondo è una funzione anonima con cui definiamo la struttura delle colonne. Nell’esempio viene creata la tabella utenti con chiave primaria = id.

Route::get( 'crea/utenti', function()
	{
		Schema::create( 'utenti', function($table)
			{
				$table->increments( 'id' );
				$table->string( 'username', 30 );
				$table->string( 'password', 100 );
				$table->string( 'email', 64 )->unique();
				$table->timestamps();
			});
	});

Oltre alla colonna id abbiamo creato altre tre colonne varchar per cui specifichiamo la lunghezza in caratteri. Con $table->timestamps() creiamo le due colonne created_at e updated_at columns che contengono rispettivamente data di creazione e di aggiornamento di un campo. Con unique() specifichiamo la colonna email non può contenere due email identiche.

tabella-utenti-laravel

Aggiungere una colonna ad una tabella già esistente

Per modificare una tabella esistente utilizziamo Schema::table()

Route::get( 'aggiungi/nome', function()
	{
		Schema::table( 'utenti', function($table)
			{
				$table->string( 'nome', 30 )->after( 'id' );
			});
	});

Abbiamo aggiunto la nuova colonna nome subito dopo id.

aggiugi_colonna_laravel

Tipi di colonna

Per un elenco completo dei tipi di colonna supportati dalla classe possiamo consultare la documentazione ufficiale di Laravel 4. Ecco alcuni esempi

Testo con lunghezza fissa: CHAR

$table->char('name', 4);

Valore boleano: BOOLEAN

$table->boolean('accetto');

Data nel formato: DATE

$table->date('created_at');

Data nel formato: DATETIME

$table->dateTime('created_at');

Numeri interi: INTEGER

$table->integer('anni');

Rinominare una tabella

Utilizziamo il metodo Schema::rename() passando il nome della vecchia tabella seguito dal quello nuovo.

Route::get( 'rinomina/utenti/users', function()
	{
		Schema::rename( 'utenti', 'users');
	});

Eliminare una tabella

Route::get( 'elimina/users', function()
	{
		Schema::drop( 'users' );
	});

per verificare l’esistenza della tabella prima di procedere

Schema::dropIfExists( 'users' );

Le Migration

Le migration offrono un sistema utile per effettuare modifiche al database. Specialmente quando non siamo gli unici a lavorare sull’applicazione, è necessario avere sempre una versione aggiornata del database. Ogni modifica viene creata mediante uno script che viene a sua volta registrato con data e ora di creazione. In questo modo potrà essere sempre eseguito  nell’ordine corretto.

Per creare una nuova migration apriamo il terminale e, a livello della root dell’applicazione digitiamo

php artisan migrate:make create_users_table

Conferma creazione

conferma-creazione-migrasion

Il comando appena digitato crea un file all’interno della cartella database/migration

nuova-migration

ecco il suo contenuto

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration {

	/**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up()
	{
		//
	}

	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down()
	{
		//
	}

}

Stiamo quindi creando una sottoclasse di Migration chiamata CreateUsersTable che contiene due metodi:

up()

Contiene il codice con le modifiche da apportare al database, nel nostro caso creeremo la tabella users

down()

Contiene il codice annullano le operazioni effettuate da up()

Creiamo la migration per la tabella users


use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration {

	/**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up()
	{
		Schema::create( 'users', function($table)
			{
				$table->increments( 'id' );
				$table->string( 'username', 30 );
				$table->string( 'password', 100 );
				$table->string( 'email', 64 )->unique();
				$table->timestamps();
			});
	}

	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down()
	{
		Schema::drop('users');
	}

}

Torniamo nel terminale e digitiamo

php artisan migrate

Una volta ottenuto il messaggio di conferma ‘Migration table created successfully’ possiamo andare a vedere cosa è successo nel database.
Oltre alla nuova tabella users vediamo che viene creata la tabella migrations.

users

migration-lanciata

migrations

migration-registrato-nel-database

Annullare la migration

Annullare l’effetto della migration significa eseguire il metodo down().
Il comando da eseguire da terminale questa volta è

php artisan migrate:rollback

In questo modo sarà eliminata l’ultima migration.
Se vogliamo eseguire un rollback completo di tutte le migration possiamo utilizzare il comando

php artisan migrate:reset

  inStileWeb.com
blog comments powered by Disqus