如何使用propel将此查询转换为Criteria?

时间:2010-11-26 10:00:08

标签: symfony1 criteria propel

我尝试使用Symfony和Propel的Criteria进行查询,但它不起作用:

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%'

如何使用'OR'进行查询?

2 个答案:

答案 0 :(得分:3)

唯一缺少的是上次添加的'或':

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

答案 1 :(得分:0)

在处理OR时,您必须使用不是最容易理解的标准。使用他们目前正在开发的最新版本的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);