2010-11-26 8 views
1

ich versuchen, die Abfrage mit Symfony und Propel die Kriterien zu tun, aber es funktioniert nicht:Wie übersetzt man diese Abfrage in Kriterien mit Antrieb?

SELECT * 
FROM `produit` 
WHERE `nom` LIKE '%parasol%' 
OR `chapeau` LIKE '%parasol%' 
OR `description` LIKE '%parasol%' 

Das ist meine Abfrage mit Propel ist:

$c = new Criteria(); 
$c->addOr(ProduitPeer::NOM, '%' . $search. '%', Criteria::LIKE); 
$c->addOr(ProduitPeer::DESCRIPTION, '%' . $search. '%', Criteria::LIKE); 
$c->add(ProduitPeer::CHAPEAU, '%' . $search. '%', Criteria::LIKE); 
$req = ProduitPeer::doSelect($c); 

Das Ergebnis hiervon ist:

SELECT * 
FROM produit 
WHERE produit.NOM LIKE '%parasol%' 
AND produit.DESCRIPTION LIKE '%parasol%' 
AND produit.CHAPEAU LIKE '%parasol%' 

Wie man eine Abfrage mit 'ODER' macht ??

Antwort

3

Das einzige, was fehlt, ist die ‚Oder‘ aus dem letzten add:

$c = new Criteria(); 
$c->addOr(ProduitPeer::NOM, '%' . $search. '%', Criteria::LIKE); 
$c->addOr(ProduitPeer::DESCRIPTION, '%' . $search. '%', Criteria::LIKE); 
$c->addOr(ProduitPeer::CHAPEAU, '%' . $search. '%', Criteria::LIKE); 
$req = ProduitPeer::doSelect($c); 
0

Wenn mit RUP Umgang Sie Kriterium verwenden haben, die nicht die einfachsten Dinge zu verstehen sind. Mit der neuesten Version von Propel, an der sie gerade arbeiten, wird sich das Kriterienobjekt komplett ändern und intuitiver werden. Aber bis dahin ...

$c = new Criteria(); 
$c1  = $c->getNewCriterion(ProduitPeer::NOM, '%'.$search.'%', Criteria::LIKE); 
$c2  = $c->getNewCriterion(ProduitPeer::DESCRIPTION, '%'.$search.'%', Criteria::LIKE); 
$c3 = $c->getNewCriterion(ProduitPeer::CHAPEAU, '%'.$search.'%', Criteria::LIKE); 

$c2->addOr($c3); 
$c1->addOr($c2); 

$c->add($c1); 

$req = ProduitPeer::doSelect($c); 
+0

Kriterien sind nur notwendig, wenn Sie und/oder in der gleichen Abfrage benötigen, oder Sie wollen logische Gruppierung, wie (1 und 2) oder (3 und 4). Sie werden für die Abfrage des OP nicht benötigt. – Maerlyn

Verwandte Themen