0

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

现在,简单的方法是使用一个巨大的开关盒,但感觉不对。如果 where() 子句接受数组,那会很容易,但现在呢?

谢谢!

4

2 回答 2

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 标准包中的原因——至少目前是这样。

于 2012-06-20T20:37:52.670 回答
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 的答案对其进行一些调整,以便在 OR 条件中具有不同的列条件。

于 2013-06-07T04:28:06.570 回答