Nei post precedenti abbiamo imparato a configurare il database e a creare la struttura delle tabelle con Schema builder, ora vediamo la parte che riguarda l’interazione con database stesso.

Tutte le volte che dobbiamo effettuare un’operazione con il database, entra in gioco il model.
In una applicazione MVC il model si occupa della logica di business che si riferisce a tutta quella logica applicativa che rende operativa un’applicazione.

Il model gestisce lo scambio di informazioni tra una sorgente dati e l’interfaccia utente, attraverso il controller. Il controller comunica con il model per ottenere le informazioni. Queste saranno inviate ad una vista, dove assieme ai template costituiranno la pagina visualizzata dagli utenti.

Generalmente il model non comunica direttamente con un view ma non è impossibile che accada.

Un model comunica invece con altri model, andando a costruire una serie di relazioni che rendono più semplice e veloce il recupero dei dati da parte del controller.

Laravel  allo stesso modo di altri framework utilizza un proprio ORM, chiamato Eloquent. Un ORM (Object-Relational Mapping) permette l’integrazione dei database relazionali con il tipo di programmazione orientata agli oggetti che stiamo utilizzando.

In Eloquent una classe corrisponde a una tabella del database e per ogni modifica viene creato un oggetto. Attraverso l’utilizzo di semplici metodi possiamo effettuare operazioni complesse come la creazione, prelievo, aggiornamento ed eliminazione dei dati.

Creazione di un Model: convenzioni

Ogni model corrisponde a un file all’interno della cartella app/models. In una nuova installazione di Laravel è presente un model User.php che permette di gestire la tabella users del database.

model-laravel-users

Per convenzione il nome del file, con l’iniziale maiuscola, corrisponde al nome della classe. Eloquent presume che il nome della classe sia il singolare del nome della tabella ne database, quindi collega User alla tabella users. Tuttavia è possibile esplicitare il nome della tabella

class User extends Eloquent {
    public static $table = 'utenti';
}

Eloquent presume che la tabella abbia un campo id considerato come chiave primaria.

Di defaulti eloquent automatizza l’inserimento del timestamp relativo all’inserimento e aggiornamento di un campo. Se vogliamo disabilitare questo comportamento bisogna scrivere

class User extends Eloquent {
    public static $timestamps = false;
}

Per tutte le tabelle in cui $timestamps == true dobbiamo assicurarci che esistano i campi created_at e updated_at altrimenti riceveremo un errore sql relativo alle colonne non trovate. Per aggiungere le due colonne in modo automatico utilizziamo il metodo $table->timestamps();in fase di creazione del database (vedi guida sulle migrations).

Inserimento di un utente

Per creare un nuovo utente semplicemente creaiamo un nuova istanza della classe User e impostiamo gli attributi pubblici che sono mappati come le colonne della tabella users. Con il metodo save() rendiamo effettive le modifiche nel database.

Route::get( 'nuovo/utente', function()
	{
		$utente = new User;
		$utente->username = 'Isw';
		$utente->password =  Hash::make( 'password' );
		$utente->email = 'test@mail.com';
		$utente->save();
	});

Come sempre utilizziamo una rotta per verificare il funzionamento del codice. Tuttavia, in una applicazione reale, questo tipo di operazioni saranno effettuate all’interno di un controller.

Dopo aver visitato l’URL nuovo/utente controlliamo la tabella users. Oltre ai valori da noi specificati è stato aggiunto automaticamente il timestamp per created_at e updated_at.

insirimento-utente-laravel copia

Prelevamento di dati relativi all’utente

Se conosciamo l’id di un utente, possiamo utilizzare il metodo statico find() per recuperare il record relativo e restituire ad esempio l’username.

Route::get( 'utente/da/id', function()
	{
		$utente = User::find( '5' );
		return $utente->username;
	});

Se vogliamo recuperare tutti gli utent possiamo utilizzare il metodo All()

Route::get( 'tutti/gli/utenti', function()
	{
		$utenti = User::all();
		return $utenti;
	});

In una guida successiva vedremo nel dettaglio come effettuare le query con Eloquent.

Aggiornamento dati utente

Per aggiornare un utente recuperiamo l’istanza dell’oggetto col metodo find(), cambiamo la proprietà che ci interessa e aggiorniamo il database con save()

Route::get( 'aggiornamento/utente', function()
	{
		$utente = User::find( 5 );
		$utente->email = 'nuova.email@mail.com';
		$utente->save();
	});

Eliminazione utente

Per eliminare un utente utilizziamo il metodo delete().

Route::get( 'eliminazione/utente', function()
	{
		$utente = User::find( 5 );
		$utente->delete();
	});

Possiamo utilizzare per lo stesso scopo, il metodo destroy() assieme all’id di uno o più utenti

Route::get( 'eliminazione/utente', function()
	{
		 User::destroy( 3, 4 );
	});

  inStileWeb.com
blog comments powered by Disqus