簡體   English   中英

Zend_db_Select哪里有多個,但可能帶有可變子句?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM