是否可以动态创建包含多个where()子句的select语句?假设一个带有多个参数的函数。如果第N个参数非空,则在语句中添加 - > where(' sth =?",$ value)子句,并为所有参数执行此操作。
现在,琐碎的方式将是一个巨大的开关盒,但感觉不对。如果where()子句接受数组,那将很容易,但现在呢?
谢谢!
答案 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条件下有不同的列条件。