Bislang konnten wir auf Objekte in der Datenbank nur über den
Primärschlüssel und die Methode retrieveByPK() der
entsprechenden Helferklasse zugreifen. Wenn wir nach einem Objekt
suchen, so wird es in der Regel jedoch der Fall sein, dass wir den
Primärschlüssel nicht kennen. Hier kommen die Klasse Criteria
sowie die Methode doSelect() der Helferklassen ins Spiel.
Die Klasse Criteria kapselt eine beliebige Anzahl von
Kriterien, nach denen mit der Methode doSelect() gesucht
werden kann. In Beispiel 12.7
erzeugen wir zunächst ein Criteria-Objekt. Mit dem
ersten Aufruf der Methode add() legen wir fest, dass der
Vorname des Autors "Sebastian" sein soll. Die Konstante
AuthorPeer::FIRST_NAME enthält hierbei den Namen der
entsprechenden Tabellenspalte, auf die das Suchkriterium angewendet
werden soll.
Beim zweiten Aufruf von add() nutzen wir den optionalen
dritten Parameter der Methode, um den zu verwendenden Vergleichsoperator
festzulegen: Criteria::NOT_EQUAL bedeutet in diesem Fall,
dass der Nachname nicht "Nohn" sein soll. Die verfügbaren Vergleichsoperatoren
sind die Konstanten der Klasse Criteria in
Abbildung 12.7.
Schließlich wird das Criteria-Objekt an die Methode
AuthorPeer::doSelect() übergeben, die ein Array der
passenden Author-Objekte als Ergebnis liefert.
Beispiel 12.7: Suche nach Objekten mit einfachen Kriterien
<?php
require_once 'propel/Propel.php';
Propel::init('books/conf/runtime-conf.php');
require_once 'books/AuthorPeer.php';
$criteria = new Criteria;
$criteria->add(
AuthorPeer::FIRST_NAME,
'Sebastian'
);
$criteria->add(
AuthorPeer::LAST_NAME,
'Nohn',
Criteria::NOT_EQUAL
);
$authors = AuthorPeer::doSelect($criteria);
foreach ($authors as $author) {
print 'Sebastian ' . $author->getLastName();
}
?>Sebastian Bergmann
Intern führt die Ausführung der Methode add() des
Criteria-Objektes dazu, dass ein neues Objekt der
Klasse Criterion erzeugt und dem
Criteria-Objekt hinzugefügt wird. Alternativ kann man ein
solches Criterion-Objekt auch von Hand erzeugen und
ebenfalls über die Methode add() einem
Criteria-Objekt hinzufügen.
Möchte man Suchkriterien miteinander kombinieren, beispielsweise mit
einer Oder-Verknüpfung, so muss man zunächst entsprechende
Criterion-Objekte über die Methode getNewCriterion()
eines Criteria-Objektes erzeugen. Über die Methode
addOr() vollzieht man dann die Oder-Verknüpfung der
beiden Suchkriterien und fügt diese dann dem Criteria-Objekt
hinzu. So wird in Beispiel 12.8
nach Autoren gesucht, deren Vorname "Sebastian" oder "Hakan" ist.
Beispiel 12.8: Suche nach Objekten mit verknüpften Kriterien
<?php
require_once 'propel/Propel.php';
Propel::init('books/conf/runtime-conf.php');
require_once 'books/AuthorPeer.php';
$criteria = new Criteria;
$sebastian = $criteria->getNewCriterion(
AuthorPeer::FIRST_NAME,
'Sebastian'
);
$hakan = $criteria->getNewCriterion(
AuthorPeer::FIRST_NAME,
'Hakan'
);
$sebastian->addOr($hakan);
$criteria->add($sebastian);
$authors = AuthorPeer::doSelect($criteria);
foreach ($authors as $author) {
print $author->getFirstName() . $author->getLastName();
}
?>Sebastian Bergmann Hakan Kücükyilmaz