我尝试使用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'进行查询?
答案 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);