2010-11-26 64 views
1

我尝试做与Symfony和行走的标准查询,但它不工作:如何将这个查询翻译成Criterion与推动?

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

这是我的查询与波轮:

$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'查询?

回答

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

当手术室打交道,你必须使用标准不属于最容易理解的事情。随着他们目前正在开发的最新版本的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); 
+0

只有当您需要和/或在同一个查询中,或者您想要逻辑分组(如(1和2)或(3和4))时,标准才是必不可少的。 OP的查询不需要它们。 – Maerlyn 2010-11-27 13:18:09