Zend_db_Select多个where但可能有变量子句?

时间:2012-06-20 19:37:17

标签: php zend-framework zend-db zend-db-select

是否可以动态创建包含多个where()子句的select语句?假设一个带有多个参数的函数。如果第N个参数非空,则在语句中添加 - > where(' sth =?",$ value)子句,并为所有参数执行此操作。

现在,琐碎的方式将是一个巨大的开关盒,但感觉不对。如果where()子句接受数组,那将很容易,但现在呢?

谢谢!

2 个答案:

答案 0 :(得分:0)

我已经指出,实现一个通用的WHERE包装器并不是一项微不足道的任务:这就是为什么(我认为)ZF开发人员决定使用一个更简单的方法,这基本上需要一个SQL表达式 - 而不是数组。

为你的案例实现这样的功能更容易:

function whereX(Zend_Db_Select $select, array $args) {
  foreach($args as $argExpression => $argValue) {
    $select->where($argExpression, $argValue);
  }
}

...然后通过类似的东西使用它......

whereX($select, array('price < ?' => $minimumPrice, 'price > ?' => $maximumPrice));

但是当您决定使用“OR”条件时,应该调整该函数 - 或者制作一些更复杂的子句。随着它变得越来越复杂,它的简单性就会恶化......

我想这就是为什么它不包含在Zend标准包中 - 至少目前是这样。

答案 1 :(得分:0)

如果有人正在寻找替代方案(Zend Framework 1.12.3):

 $where = array();
 foreach($delete_ids as $delete_cond)
          $where[]=$db_adapter->quoteInto ('id=?', $delete_cond);

  $where = implode(' OR ', $where);
  $where = '('.$where.') AND '.$db_adapter->quoteInto('somethingEse=?', $something);

这将为您提供以下结果:

WHERE (as many OR conditions as you like of the **same** column) AND (single condition that must
also be met)

你可以用raina77ow的答案调整一下,以便在ORs条件下有不同的列条件。