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 dei dati degli oggetti nel DB. All'inizio, creiamo un nuovo record nella tabella degli editori. Nel Listing 4 è presentato un esempio di inserimento e di modifica di record in un'unica tabella. Entrambele operazioni sono servite da un unico metodo: $obiekt->save(). Propel autonoma-mente si occupa di generare il valore per la chiave primaria e di prepararela corrispondente istruzione SQL – INSERT o UPDATE, a seguito di questo, creiamo nuove iscrizioni nel DB o aggiorniamo quelle già esistenti. La cancellazione dei dati superflui è un'operazione semplice:è sufficiente richiamare il metodo delete().

Listing 4. Salvataggio, aggiornamento e cancellazione dei 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 base sugli oggetti nonè complicato e lo si può scrivere velocemente. Tuttavia va notato che, per cancellare o aggiornare i record nel DB ciè necessaria la rappresentazione del record stesso. Esaminiamo allora, il modo di raccoglimento degli oggetti, cioè il comando SQL SELECT.

Nel caso in cui già si disponga del corrispettivo valore della chiave primaria, il modo più facile è estrarre un unico record. In tale caso è disponibile il metodo statistico ObjectPeer::retrieveByPK($id), dove $id può essere sia il valore unico (per la chiave primaria definita in un campo), sia la tabella.

Per la raccolta di più record soddisfacenti i criteri indicati, possiamo utilizzare il meccanismo dei criteri. È questo, in un certo senso, un linguaggio orientato agli oggetti, per la definizione delle query agli stessi. A questo scopo abbiamo disponibili due classi: Criteria e Criterion.Il modo di utilizzo è presentato nel Listing 5, nel quale mostriamo gli esempi di tutti i modi di raccolta dei dati che abbiamo citato. La classe Criteria, comprende l'intera query, nella quale sono definite le condizioni relative ai dati (Criterion) ed altri parametri guida (ad es. il limite dei versi da restituire). Il modo più semplice è pensare alla classe per oggetti Criteria come al corrispettivo dell'intera istruzione SELECT. Criterion è il corrispettivo di una condizione unica nella parte WHERE dell'istruzione SELECT. Le condizioni, ricevendo il nuovo oggetto di tipo Criterion, possono essere collegate singolarmente in strutture molto complicate. Il criterio API è un nuovo strumento nelle nostre mani e dovremo dedicare un po' di tempo a fare la sua conoscenza - ricordare queste due semplici regole, aiuta a cominciare a lavorare con lo stesso.

Anche se questo modo di eseguirele query agli oggetti permette di esprimere molte condizioni, esistono situazioni nelle 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);

?>

 

<<< Precedente  -  Continua >>>

 



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Lorenzo
Hai qualche domanda da fare?