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

La classe "prodotti"

Sviluppiamo la classe prodotti della nostra applicazione PHP + Angular che si occuperà di implementare tutti i metodi necessari per operare con il database in lettura e scrittura per la tabella dei prodotti.
Sviluppiamo la classe prodotti della nostra applicazione PHP + Angular che si occuperà di implementare tutti i metodi necessari per operare con il database in lettura e scrittura per la tabella dei prodotti.
Link copiato negli appunti

La classe prodotti si occuperà di implementare tutti i metodi necessari per operare con il database in lettura e scrittura rispetto alla tabella dei prodotti e alle informazioni correlate. Fondamentalmente avremo i cinque metodi classici, ovvero, la lettura di tutti i prodotti, la lettura di un singolo prodotto tramite filtro per id e le operazioni in scrittura, cioè, l'inserimento, la modifica e l'eliminazione di un record.

Per questo definiremo la classe e le sue proprietà: private quelle relative al database, pubbliche quelle relative ai campi della tabella prodotti.

class Prodotto{
   // connessione al database e nome della tabella
   private $conn;
   private $nome_tabella = "prodotti";
   // proprietà dell'oggetto
   public $id;
   public $nome;
   public $descrizione;
   public $prezzo;
   public $categoria_id;
   public $categoria_nome;
   public $data_insert;
}

Per quanto riguarda il database la connessione verrà passata dal costruttore, il nome della tabella lo imposteremo invece noi staticamente. Le proprietà pubbliche, invece, sono relative alla costruzione dell'oggetto e quindi riflettono i campi della tabella prodotti e della tabella categoria in relazione uno a molti con questa.

Come anticipato, inseriamo il codice relativo al costruttore:

public function __construct($db){
   $this->conn = $db;
}

Occupiamoci ora del primo metodo che serve per l'estrazione dei dati:

function leggi(){
   $sql = "SELECT c.nome as categoria_nome, p.id, p.nome, p.descrizione, p.prezzo, p.categoria_id, p.data_insert
       FROM " . $this->nome_tabella . " p
       INNER JOIN categorie c ON p.categoria_id = c.id
       ORDER BY p.data_insert DESC";
   $stmt = $this->conn->prepare($sq);
   $stmt->execute();
   return $stmt;
}

Questo metodo contiene la stringa SQL per la SELECT sul database, per comodità viene utilizzato l'alias sul nome delle tabelle. Le tabelle prodotti e categorie sono vincolate da una clausola INNER JOIN in modo da forzare la coerenza dei dati estratti, mentre per l'ordinamento si è scelto di usare la data di inserimento inversa: ovviamente in caso di necessità si possono scegliere ordinamenti differenti.

Il secondo metodo proposto è l'estrazione di un singolo record:

function leggiProdotto(){
   $sql = "SELECT c.nome as categoria_nome, p.id, p.nome, p.descrizione, p.prezzo, p.categoria_id, p.data_insert
       FROM " . $this->nome_tabella . " p
           INNER JOIN
               categorie c
                   ON p.categoria_id = c.id
       WHERE
           p.id = ?
       LIMIT
           0,1";
   $stmt = $this->conn->prepare( $sql );
   $stmt->bindParam(1, $this->id);
   $stmt->execute();
   $row = $stmt->fetch(PDO::FETCH_ASSOC);
   $this->nome = $row['nome'];
   $this->prezzo = $row['prezzo'];
   $this->descrizione = $row['descrizione'];
   $this->categoria_id = $row['categoria_id'];
   $this->categoria_nome = $row['categoria_nome'];
}

La query ricalca sostanzialmente quella vista precedentemente, con l'unica differenza della clausola WHERE sulla chiave primaria id, ovviamente useremo un parametro, in questo caso rappresentato nell'istruzione SQL dal segnaposto ?

Quindi preparazione della query, assegnazione del valore al parametro, esecuzione della query ed assegnazione dei dati estratti alle proprietà del nostro oggetto. Quando andremo a implementare la classe vedremo come recuperare effettivamente questi valori.

Ti consigliamo anche