La classe Criteria
Publié par Aline Bunelle
La classe Criteria va nous permettre de formuler nos requêtes SQL.
Remarque : Un objet de type Criteria est attendu par les fonctions d’accès des classes Peer (doSelect; doDelete, ...).
Exemple: $c = new Criteria();
$list = NomTablePeer::doSelect($c); SELECT * FROM nom_tableCriteria et les conditions
Maintenant voyons comment ajouter des conditions à notre requête.
Pour cela, il suffit de les ajouter à notre objet. La méthode add de la classe Criteria prend trois paramètres, respectivement :- le champ affecté;
- la valeur;
- l’opérande.
Remarque : par défaut l’opérande est ’=’.
Exemple: $c = new Criteria();
$c->add(NomTablePeer::ID, 5);
$list = NomTablePeer::doSelect($c);Nous récupérons l’enregistrement de la table nom_table où l’id est égale à 5. (Nous comprenons mieux la correspondance avec la méthode retrieveByPk vu tout à l’heure).
Ici nous allons recupérer aucun ou un enregistrement. En passant par la méthode doSelect, nous récupérerons soit :- un tableau vide,
- un tableau d’une case.
- une valeur VIDE,
- directement notre objet NomTable.
La méthode add seule ne nous permettra pas d’effectuer des OR dans nos conditions de selection. Nous utiliserons pour cela les objets de type Criterion.
$c = new Criteria();
$criterion = $c->getNewCriterion (
NomTable::ID, 6
)->addOr(
$c->getNewCriterion (
NomTable::ID, 8
)
);
$c->addAnd($criterion); SELECT * FROM nom_table WHERE id = 6 OR id = 8Criteria et les opérantes
Evidemment nous n’allons pas nous limiter à l’opérande ’=’, voici comment utiliser nos opérandes avec Criteria :WHERE column = value ->add(column, value);
WHERE column <> value ->add(column, value, Criteria::NOT_EQUAL);
Other Comparison Operators
> , < Criteria::GREATER_THAN, Criteria::LESS_THAN
>=, <= Criteria::GREATER_EQUAL, Criteria::LESS_EQUAL
IS NULL, IS NOT NULL Criteria::ISNULL, Criteria::ISNOTNULL
LIKE, ILIKE Criteria::LIKE, Criteria::ILIKE
IN, NOT IN Criteria::IN, Criteria::NOT_IN
Other SQL Keywords
ORDER BY column ASC ->addAscendingOrderByColumn(column);
ORDER BY column DESC ->addDescendingOrderByColumn(column);
LIMIT limit ->setLimit(limit)
OFFSET offset ->setOffset(offset)
FROM table1, table2 WHERE table1.col1 = table2.col2 ->addJoin(col1, col2)
FROM table1 LEFT JOIN table2 ON table1.col1 = table2.col2 ->addJoin(col1, col2, Criteria::LEFT_JOIN)
FROM table1 RIGHT JOIN table2 ON table1.col1 = table2.col2 ->addJoin(col1, col2, Criteria::RIGHT_JOIN)Le système Relationnel
Voyons enfin l’atout de notre système relationnel mis en place au début.
En indiquant nos clés étrangères, lors de la génération des objets, l’ORM va ajouter les méthodes permettant d’accèder, à partir d’un objet, à un autre objet lié. Plus clairement :
Au lieu de faire : $record = NomTablePeer::retrieveByPk(1);
$c = new Criteria();
$c->add(NomTable2Peer::NOM_TABLE_ID, 1);
$record2 = NomTable2Peer::doSelectOne($c); $record = NomTablePeer::retrieveByPk(1);
$record2 = $record->getNomTable2();Ceci nous fera gagner un temps et une clarté considérable dans notre application !

