2010-11-26 40 views
1

J'essaie de faire des critères pour la requête avec Symfony et Propel, mais il ne fonctionne pas:Comment traduire cette requête en critères avec propel?

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

C'est ma requête Propel:

$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); 

Le résultat de ceci est:

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

Comment faire une requête avec 'OU' ??

Répondre

3

La seule chose qui manque est le « Ou » du dernier 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

Lorsque vous traitez avec ORs vous devez utiliser le critère qui ne sont pas les choses les plus faciles à comprendre. Avec la dernière version de Propel sur laquelle ils travaillent actuellement, l'objet de critères va complètement changer et devenir beaucoup plus intuitif. Mais jusque-là ...

$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

Critériums ne sont neccesary lorsque vous avez besoin et/ou dans la même requête, ou si vous voulez regroupement logique, comme (1 et 2) ou (3 et 4). Ils ne sont pas nécessaires pour la requête OP. – Maerlyn