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

Il Model: Zend_Db

Il modello MVC di Zend: il model Zend_Db. I componenti da cui è formato ed esempi di utilizzo
Il modello MVC di Zend: il model Zend_Db. I componenti da cui è formato ed esempi di utilizzo
Link copiato negli appunti

Zend_Db rappresenta l'interfaccia per la gestione di database SQL in ZF. Questo componente fornisce un livello di astrazione che permette di gestire diversi sistemi di base di dati utilizzando un insieme comune di tool. Questo permette nella pratica di astrarre dal tipo di database utilizzato, portando anche a livello di storage una grande flessibilità e comodità.

Zend_Db_Table è la classe che implementa il pattern Table Data Gateway e il pattern Row Data Gateway, che permettono un approccio più generico alle gestione del database SQL. Questa è inoltre la classe che utilizziamo per creare i nostri modelli object-oriented; vediamo un esempio.

<?php
class Model_Articolo extends Zend_Db_Table {
	protected $_name 	= 'articolo';
	protected $_primary = 'id_articolo';
	function fetchLatest( $count = 5 ) {
		return $this->fetchAll( null,' id_articolo ASC', $count );
	}
 /*
 * Questo metodo restituisce il record che possiede l' “id_articolo” uguale al parametro
 * $articoloID: creiamo una SELECT con una clausola WHERE sul parametro “id_articolo”.
 * Il metodo “fetchAll” lo ereditiamo da Zend_Db_Table , e si occupa di eseguire la query
 * restituendo il record che viene salvato nella variabile “$articolo”
 */
	function fetchArticoloItem( $articoloID ) {
		$select = $this->select();
		$select->from($this, array('id_articolo', 'title'))
		->where(' id_articolo = ?', $articoloID);
		$articolo = $table->fetchAll($select);
		return $articolo;
	}
	//Crea un nuovo record nella tabella 'articolo' per memorizzare le caratteristiche del 	//nuovo oggetto
 		function create ( $data ) {
		[...]
		$this->insert($data);
		[...]
 	}

Supponiamo di avere una tabella MySQL articolo con chiave primaria id_articolo e due campi, title e description. La classe Model_Articolo rappresenta il modello per la tabella in questione: la prima cosa che notiamo è che estende Zend_Db_Table.

Inoltre, per ogni modello che definiamo dobbiamo dichiarare le variabili protected $_name che richiama il nome reale della tabella e $_primary che richiama la chiave primaria della tabella stessa.

La parte rimanente del codice della classe è composta da tre funzioni, fetchLatest( $count = 5 ), fetchArticoloItem( $articoloID ) e create( $data ): la prima permette di ricavare gli ultimi articoli inseriti, specificati in numero dal parametro $count, che è impostato a 5 come valore di default. La seconda funziona invece restituisce un oggetto che contiene l'id e il titolo dell'articolo che ha come identificatore quello passato come parametro. La funzione create la vedremo invece in dettaglio nel prossimo paragrafo. Nei primi due casi le query sono delle semplici SELECT sulla tabella articolo; nel primo caso ad esempio l'SQL generato dal codice PHP è:

SELECT * FROM "articolo" ORDER BY articolo_id DESC LIMIT 0,5

Zend_Db_Table fornisce quindi un'interfaccia flessibile ed intuitiva per la gestione delle nostre tabelle: per inserire un articolo ad esempio è possibile utilizzare la funzione insert messa a disposizione dalla classe stessa ed ereditata dal nostro model. Supponiamo di avere creato il seguente controller ArticoloController:

class ArticoloController extends Zend_Controller_Action {
	public function init() {
		/* qui inizializziamo il controller*/
		[...]
	}
	/*
	* Questa è la action chiamata di default
	*/
	public function indexAction() {
		$this->view->headTitle( 'Elenco Articoli' );
		$articoliData = new Model_Articolo();
		$articoli = $articoliData->fetchLatest();
		$this->view->articoli = $articoli;
	}
	/*
	* Medoto che gestisce la richiesta di creazione di un articolo
	*/
	public fuction createAction() {
		[...]
		//controlliamo che la richiesta sia pervenuta attraverso il metodo POST
		if (  $this->getRequest()->isPost() ) {
			//Recuperiamo i parametri inviati attraverso il form
			$title = $this->getRequest()->getParam(“article_title”);
			$description = $this->getRequest()->getParam(“article_description”);
			//creiamo il model per l'oggetto Articolo
			$article_model = new Model_Articolo();
			//l'array che contiene i dati da passare al model per la creazione del 				//record
			$data = array(
					  “title” => $title,
					  “description” => $description
					);
			//richiamiamo il metodo “create” del model per creare un oggetto 				//Articolo
			$article_model->create($data);
			[...]	
		}
		[...]
	}
	}

Quando il Front Controller riceve la richiesta di creazione articolo (www.dominio.com/public/articolo/create) richiama il controller articolo e la action create: viene dunque eseguito il metodo createAction() visto precedentemente nella classe ArticoloController. Come abbiamo visto nei commenti sul codice, viene creato il model per l'oggetto articolo, e successivamente richiamata la funzione create: vediamo in dettaglio come il model crea un nuovo record nel database.

Per inserire un articolo richiamiamo la funzione insert messa a disposizione dalla classe Zend_Db_Table:

[...]
$this->insert($data);
[...]

Questa istruzione corrisponde ad una INSERT SQL: ZF si occupa di mappare per noi i dati sui campi della tabella articolo e di scrivere la query completamente. Le query dovrebbero essere lanciate all'interno di un blocco try {} catch {} per poter gestire correttamente eventuali errori: inoltre rimandiamo alla documentazione online di ZF per tutte le direttive utilizzabili per la gestione delle query (clausola limit, order, implementazione del group by e della clausola having e così via).


Ti consigliamo anche