Database in PHP5 con Propel (Parte V)
Pagina 5 di 8
Operazioni di base sugli oggetti
Avendo già configurato l'ambiente operativo,passiamo alla parte più interessante:la gestione deidati degli oggetti nel DB. All'inizio, creiamo un nuovorecord nella tabella degli editori. Nel Listing 4 èpresentato un esempio di inserimento e di modifica di recordin un'unica tabella. Entrambele operazioni sono serviteda un unico metodo: $obiekt->save(). Propel autonoma-mentesi occupa di generare il valore per la chiave primaria e diprepararela corrispondente istruzione SQL – INSERT oUPDATE, a seguito di questo, creiamo nuove iscrizioni nel DBo aggiorniamo quelle già esistenti. La cancellazionedei dati superflui è un'operazionesemplice:è sufficiente richiamare il metodo delete().
Listing 4. Salvataggio, aggiornamento e cancellazionedei dati
Propel::init(dirname(__FILE__).'/conf/bookstore-conf.php');include_once 'bookstore/Publisher.php';$pub = new Publisher();$pub->setName("Editore Software");$pub->save();echo 'Identificatore nuovo editore : '.$pub->getPublisherId();$pub->setName("Editore Software");$pub->save();echo 'Cancella il dato';$pub->delete();
Come vediamo, il codice che esegue le operazioni di basesugli oggetti nonè complicato e lo si puòscrivere velocemente. Tuttavia va notato che, per cancellareo aggiornare i record nel DB ciè necessaria larappresentazione del record stesso. Esaminiamo allora, ilmodo di raccoglimento degli oggetti, cioè il comandoSQL SELECT.
Nel caso in cui già si disponga del corrispettivovalore della chiave primaria, il modo più facileè estrarre un unico record. In tale caso èdisponibile il metodo statisticoObjectPeer::retrieveByPK($id), dove $id può essere siail valore unico (per la chiave primaria definita in uncampo), sia la tabella.
Per la raccolta di più record soddisfacenti i criteriindicati, possiamo utilizzare il meccanismo dei criteri.È questo, in un certo senso, un linguaggio orientatoagli oggetti, per la definizione delle query agli stessi. Aquesto scopo abbiamo disponibili due classi: Criteria eCriterion.Il modo di utilizzo è presentato nel Listing5, nel quale mostriamo gli esempi di tutti i modi di raccoltadei dati che abbiamo citato. La classe Criteria, comprendel'intera query, nella quale sono definite le condizionirelative ai dati (Criterion) ed altri parametri guida (ad es.il limite dei versi da restituire). Il modo piùsemplice è pensare alla classe per oggetti Criteriacome al corrispettivo dell'intera istruzione SELECT.Criterion è il corrispettivo di una condizione unicanella parte WHERE dell'istruzione SELECT. Le condizioni,ricevendo il nuovo oggetto di tipo Criterion, possono esserecollegate singolarmente in strutture molto complicate. Ilcriterio API è un nuovo strumento nelle nostre mani edovremo dedicare un po' di tempo a fare la sua conoscenza- ricordare queste due semplici regole, aiuta a cominciare alavorare con lo stesso.
Anche se questo modo di eseguirele query agli oggettipermette di esprimere molte condizioni, esistono situazioninelle quali dovremo ritornare a SQL. Per fortuna in Propelè possibile eseguire query di basso livello,cioè query SQL (Listing 5).
Listing 5. Modi di ricerca degli oggetti
<?php$old_inc_path = ini_get('include_path');ini_set('include_path',$old_inc_path.';F:/www/phpsolmag/propel/118-propel-1.0.0/runtime/classes');require_once('propel/Propel.php');Propel::init(dirname(__FILE__).'/conf/bookstore-conf.php');include_once 'bookstore/Publisher.php';$pub = PublisherPeer::retrieveByPK(14);print_r($pub);$c = new Criteria();$c->add(PublisherPeer::NAME, "%Edi%" , Criteria::LIKE);$pubs_arr = PublisherPeer::doSelect($c);print_r($pubs_arr);$c = new Criteria();$criterion = $c->getNewCriterion(PublisherPeer::NAME, "%Edi%" , Criteria::LIKE,Criteria::LIKE);$criterion->addOr($c->getNewCriterion(PublisherPeer::NAME, "%Helion%" ,Criteria::LIKE, Criteria::LIKE));$c->add($criterion);$pubs_arr = PublisherPeer::doSelect($c);print_r($pubs_arr);$sql = "SELECT * FROM ".PublisherPeer::TABLE_NAME." WHERE LEFT(".PublisherPeer::NAME." ,1) = 'W'";$con = Propel::getConnection(PublisherPeer::DATABASE_NAME);$stmt = $con->createStatement();$pubs_arr = PublisherPeer::populateObjects($stmt->executeQuery($sql,ResultSet::FETCHMODE_NUM));print_r($pubs_arr);?>
- Articolo precedente Gestire database in PHP 5 (Parte III)
- Articolo successivo Gestire db in PHP5 (Parte IV)