Reputation: 1837
I try to do the query with Symfony and Propel's Criteria, but it's doesn't work :
SELECT *
FROM `produit`
WHERE `nom` LIKE '%parasol%'
OR `chapeau` LIKE '%parasol%'
OR `description` LIKE '%parasol%'
This is my query with 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);
The result of this is :
SELECT *
FROM produit
WHERE produit.NOM LIKE '%parasol%'
AND produit.DESCRIPTION LIKE '%parasol%'
AND produit.CHAPEAU LIKE '%parasol%'
How to make a query with 'OR' ??
Upvotes: 1
Views: 6992
Reputation: 3172
When dealing with ORs you have to use criterion which aren't the easiest things to understand. With the latest version of Propel that they are currently working on, the criteria object is going to change completely and become much more intuitive. But until then...
$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);
Upvotes: 0
Reputation: 34105
The only thing missing is the 'Or' from the last 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);
Upvotes: 3