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

Il model: gli oggetti Criteria

Un metodo veloce per impostare le condizioni delle query con Simfony e Propel
Un metodo veloce per impostare le condizioni delle query con Simfony e Propel
Link copiato negli appunti

Vale la pena descrivere una classe particolare chiamata Criteria (libsymfonypluginssfPropelPluginlibvendorpropelutil) che consente di costruire query complesse attraverso il metodo doSelect() delle classi peer. Tale metodo accetta come parametro di ingresso un oggetto della classe Criteria che non è altro che la definizione della query.

Per descrivere meglio il funzionamento di questo metodo facciamo riferimento al Listato 15.

Listato 15: Utilizzo del metodo doSelect e della classe Criteria
per la costruzione di una query

$criteria = new Criteria();
$libri = LibroPeer::doSelect($criteria);

Il corrispondente SQL del Listato 15 è il seguente:

SELECT * FROM LIBRI

Nell'esempio appena illustrato vengono restituiti tutti i record della tabella LIBRI. Se vogliamo introdurre delle condizioni sarà necessario valorizzare l'oggetto $criteria della classe Criteria.

Listato 16: Valorizzazione dell'oggetto $criteria della classe Criteria
per la costruzione di una query con condizioni

$criteria = new Criteria();
$criteria->add(LibroPeer::TITOLO, 'Guida Symfony');
$criteria->addAscendingOrderByColumn(LibroPeer::AUTORE);
$libri = LibroPeer::doSelect($criteria);

Nel Listato 17 troviamo il corrispondente SQL del Listato 16.

Listato 17: Corrispondente SQL del Listato 16

SELECT * FROM LIBRI WHERE TITOLO = 'Guida Symfony' ORDER BY AUTORE ASC

Nella tabella seguente vengono riportati i metodi della classe Criteria necessari per introdurre le condizioni nelle query.

SQL Criteria
WHERE nomeColonna = valore ->add(nomeColonna, valore);
WHERE nomeColonna <> valore ->add(nomeColonna, valore, Criteria::NOT_EQUAL);
WHERE nomeColonna > valore ->add(nomeColonna, valore, Criteria::GREATER_THEN);
WHERE nomeColonna < valore ->add(nomeColonna, valore, Criteria::LESS_THEN);
WHERE nomeColonna >= valore ->add(nomeColonna, valore, Criteria::GREATER_EQUAL);
WHERE nomeColonna <= valore ->add(nomeColonna, valore, Criteria::LESS_EQUAL);
WHERE nomeColonna IS NULL ->add(nomeColonna, Criteria::IS_NULL);
WHERE nomeColonna IS NOT NULL ->add(nomeColonna, Criteria::IS_NOT_NULL);
WHERE nomeColonna LIKE valore ->add(nomeColonna, valore, Criteria::LIKE);
WHERE nomeColonna ILIKE valore ->add(nomeColonna, valore, Criteria::ILIKE);
WHERE nomeColonna IN valore ->add(nomeColonna, valore, Criteria::IN);
WHERE nomeColonna NOT IN valore ->add(nomeColonna, valore, Criteria::NOT_IN);
ORDER BY nomeColonna ASC ->addAscendingOrderByColumn(nomeColonna);
ORDER BY nomeColonna DESC ->addDescendingOrderByColumn(nomeColonna);
LIMIT valore ->setLimit(valore);
OFFSET valore ->setOffset(valore);
FROM tabella1, tabella2 WHERE tabella1.colonna1 = tabella2.colonna2 ->addJoin(colonna1, colonna2)
FROM tabella1 LEFT JOIN tabella2 ON tabella1.colonna1 = tabella2.colonna2 ->addJoin(colonna1, colonna2, Criteria::LEFT_JOIN)
FROM tabella1 RIGHT JOIN tabella2 ON tabella1.colonna1 = tabella2.colonna2 ->addJoin(colonna1, colonna2, Criteria::RIGHT_JOIN)

L'esempio del Listato 18 mostra come costruire la query riportata nel Listato 19.

Listato 18: Esempio di query

$criteria = new Criteria();
$criteria->addJoin(LibroPeer::TIPOLOGIE_ID, TipoLibro::ID);
$criteria->add(LibroPeer::AUTORE, '%Rossi%', Criteria::LIKE);
$criteria->add(TipoLibro::DESCRIZIONE, 'Informatica');
$criteria->addAscendingOrderByColumn(LibroPeer::AUTORE);
$criteria->addDescendingOrderByColumn(LibroPeer::AUTORE);
$libri = LibroPeer::doSelect($criteria);

Listato 19: Corrispondente SQL del Listato 18

SELECT
       *
FROM
       LIBRI,
       TIPOLOGIE
WHERE
       LIBRI.TIPOLOGIE_ID = TIPOLOGIE.ID
       AND LIBRI.AUTORE LIKE '%Rossi%'
       AND TIPOLOGIE.DESCRIZIONE = 'Informatica'
ORDER BY
       LIBRI.AUTORE ASC,
       LIBRI.EDITORE DESC

Ti consigliamo anche