【问题标题】:How to translate this query into Criteria with propel?如何将此查询转换为带有推进力的条件?
【发布时间】:2010-11-26 10:00:07
【问题描述】:

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

【问题讨论】:

    标签: symfony1 criteria propel


    【解决方案1】:

    唯一缺少的是最后添加的“或”:

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

    【讨论】:

      【解决方案2】:

      在处理 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);
      

      【讨论】:

      • 仅当您需要和/或在同一个查询中,或者您想要逻辑分组时,例如(1 和 2)或(3 和 4),才需要标准。 OP 的查询不需要它们。
      猜你喜欢
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 2011-01-04
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多