2010-11-26 33 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