Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Modelli e struttura del database

Laravel e query SQL. Analizziamo in che modo avviene il collegamento tra il database e un'applicazione Web nel framework PHP.
Laravel e query SQL. Analizziamo in che modo avviene il collegamento tra il database e un'applicazione Web nel framework PHP.
Link copiato negli appunti

Nel pattern MVC i modelli rappresentano il punto di congiunzione tra il database e Laravel. In questo capitolo vedremo come effettuare tale collegamento.

Il primo passo è quello di inserire nel file .env i dettagli di connessione al database MySQL.

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=nome_database
DB_USERNAME=username
DB_PASSWORD=password

Soffermiamoci ora sulle due possibili implementazioni dei model nel pattern MVC.

La prima, che potremo definire purista, prevede che un modello sia una classe che rappresenta con le sue proprietà una tabella del database senza però fornire alcun metodo per operare su di essa.

Quindi se la tabella ha un campo title la classe avrà a sua volta una proprietà Model::title e potrà al limite fornire dei metodi getters e setters senza dare la possibilità di effettuare operazioni CRUD (Create, Read, Update, Delete) sulla tabella sottostante.

All'implementazione purista si contrappone quella ibrida, seguita invece da Laravel. In questa implementazione la classe model fornisce anche metodi per effettuare operazioni CRUD sulla tabella sottostante.

Si tratta di un approccio che tiene conto dell'aspetto dinamico di un'applicazione web in contrapposizione al precedente approccio sicuramente più adatto ad applicazioni Desktop o mobile native.

Nel nostro e-commerce la tabella principale è quella dei prodotti (products). In Laravel possiamo creare un modello digitando da shell il seguente comando usando la directory principale dell'applicazione.

php artisan make:model Product

Questo comando creerà la classe Product che estende la classe base Model di Laravel. In questa fase la classe creata è vuota ossia è presente solo la struttura base.

Adesso possiamo definire le proprietà di tale classe modello come segue:

namespace App;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
    protected $table = 'products';
    protected $primaryKey = 'id';
    public $incrementing = true;
    protected $fillable = ['title', 'description', 'manufacturer', 'price', 'image', 'slug'];
    public $timestamps = false;
}

$table collega il modello alla tabella MySQL dei prodotti. $primaryKey rappresenta la chiave primaria della tabella e viene usata da Laravel per ottimizzare le query al database. $incrementing è un flag booleano che indica se la chiave primaria usa la parola chiave MySQL AUTO_INCREMENT nella struttura della tabella.

$fillable indica quali campi della tabella devono essere presi in considerazione da Laravel durante le operazioni CRUD. Infine $timestamps indica se la tabella presenta i campi predefiniti di Laravel created_at e updated_at usati come riferimento cronologico nelle operazioni CRUD.

A questo punto il modello può essere usato all'interno dell'applicazione per le operazioni più comuni sui dati.

Se ad esempio volessimo reperire gli ultimi 10 prodotti ordinati per prezzo in modo ascendente e abilitando la paginazione, potremmo scrivere:

$products = Product::orderBy('price', 'asc')->paginate(10);

Si può notare come Laravel riesca con una sola riga di codice a riassumere la logica di una query MySQL con paginazione che avrebbe richiesto invece svariate linee di codice usando un approccio tradizionale.

In Laravel le query al database vengono costruite tramite la concatenazione dei metodi. Laravel adotta un approccio flessibile, nel senso che si possono usare sia i modelli sia la classe DB per effettuare operazioni sul database. Il design delle query resta tuttavia il medesimo in entrambi gli approcci.

Una query restituisce un oggetto o un array di oggetti. I campi della tabella diventano quindi proprietà pubbliche dell'oggetto restituito.

Conclusione

In questo capitolo abbiamo visto come avviene il collegamento tra il database ed un'applicazione in Laravel. Nei prossimi capitoli vedremo come usare effettivamente tale collegamento.

Ti consigliamo anche