2010-04-07 46 views
1

我在我的導航模型中定義了一個執行查詢的函數,我想知道是否有更多的「Zendy」方法來生成/執行查詢。我正在使用的查詢是由Bill Karwinanother thread here上提出的,用於設置任意記錄順序。我嘗試使用準備好的語句,但SIGN()函數中的值已被引用。Zend數據庫適配器 - 複雜的MySQL查詢

我正在使用適用於MySQL的PDO適配器。

/** 
* 
*/ 
public function setPosition($parentId, $oldPosition, $newPosition) 
{ 
    $parentId = intval($parentId); 
    $oldPosition = intval($oldPosition); 
    $newPosition = intval($newPosition); 
    $this->getAdapter()->query(" 
     UPDATE `navigation` 
     SET `position` = CASE `position` 
      WHEN $oldPosition THEN $newPosition 
      ELSE `position` + SIGN($oldPosition - $newPosition) 
      END 
     WHERE `parent_id` = $parentId 
     AND `position` BETWEEN LEAST($oldPosition, $newPosition) 
      AND GREATEST($oldPosition, $newPosition) 
    "); 
    return $this; 
} 
+0

define * Zendy * way please – Gordon 2010-04-07 21:41:52

+0

「Zendy」我的意思是使用Zend提供的抽象,而不是像上面那樣編寫直接查詢。 – Sonny 2010-04-07 22:00:40

回答

4

你可以使用Zend_Db_Select和/或Zend_Db_Expr,如果它的工作原理就像是,不改變它。真的不需要使用任何ZF組件,只是因爲它們存在或使您的代碼更多Zendy。用它們來解決特定的問題。

請記住,每個抽象將使您的代碼稍慢一些。可能不多,但也可能沒有必要。我可以從我自己的經驗中得知,儘管我們可以做到沒有更簡單,但我們屈服於使用盡可能多的ZF部件的項目。沒有付清,我們發現自己後來重構了很多。

+0

您是否有特別的ZF組件,您特別遇到性能問題? – Sonny 2010-04-08 13:21:25

+1

@Sonny是的,與DateTime相比,Zend_Date對我們表現不佳,我們現在只使用它來格式化某個語言環境的日期。此外,通常的嫌疑人:PluginBroker,Zend_Loader和ViewHelpers通過__call接口使用。另一個錯誤的選擇是使用Zend_Config來處理各種XML文件。這並不是說它是一個糟糕的組件,但在我們的情況下,DOM更合適,更容易。我也發現自己在Zend_Filter或Zend_Validate上使用filter_var。只是爲了說明這一點:我喜歡ZF,我認爲使用得當時它很棒。 – Gordon 2010-04-08 14:15:24