[英]Zend_db_Select multiple where but with variable clauses possible?
是否可以動態創建帶有多個where()子句的select語句? 假設一個函數帶有多個參數。 如果第N個參數為非空,則在語句中添加-> where('sth =?“,$ value)子句,並對所有參數執行此操作。
現在,微不足道的方式是使用巨大的開關盒,但感覺不對。 如果where()子句接受數組,那將非常容易,但是現在呢?
謝謝!
我在評論中指出,實現通用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標准軟件包中的原因-至少目前是這樣。
如果有人在尋找替代方案(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條件內具有不同的列條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.