Как перевести этот запрос в критерии с помощью propel? - PullRequest
1 голос
/ 26 ноября 2010

Я пытаюсь выполнить запрос с помощью критериев Symfony и Propel, но он не работает:

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

Это мой запрос с 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);

Результатэто:

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

Как сделать запрос с помощью «ИЛИ» ??

Ответы [ 2 ]

3 голосов
/ 26 ноября 2010

Единственное, чего не хватает, это «ИЛИ» из последнего добавления:

$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 голосов
/ 26 ноября 2010

При работе с операционными системами вы должны использовать критерий, который непросто понять. С последней версией Propel, над которой они сейчас работают, объект критериев изменится полностью и станет намного более интуитивным. Но до тех пор ...

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