I 認爲可以使用Zend_Db_Select或Zend_Db_Table_Abstract編寫select查詢,但我不明白何時使用這兩者中的哪一個。何時使用哪個Zend_Db類? Zend_Db_Select與Zend_Db_Table_Abstract
是一個比另一個更優化的東西?加入「更容易」與其中一個?
謝謝!
I 認爲可以使用Zend_Db_Select或Zend_Db_Table_Abstract編寫select查詢,但我不明白何時使用這兩者中的哪一個。何時使用哪個Zend_Db類? Zend_Db_Select與Zend_Db_Table_Abstract
是一個比另一個更優化的東西?加入「更容易」與其中一個?
謝謝!
由於歷史原因,在生成查詢時有幾種不同的選項。
在Zend Framework的早期版本中,Zend_Db_Tables有一個方法fetchAll,其中包含參數where,order,offset和limit,您可以使用它們從表中獲取行。開發人員很快發現這種方法存在侷限性。你將如何添加一個GROUP BY子句?
Zend_Db_Select是爲了解決這個問題而發明的,你會注意到由於ZF 1.5,fetchAll和相關方法接受Zend_Db_Select實例作爲第一個參數。使用fetchAll的其他參數現在不推薦使用,您應該傳入一個SQL字符串或一個Zend_Db_Select對象。
Zend_Db_Select只是一個用於構建SQL查詢的編程接口。根據用戶輸入或不同的因素改變SQL的部分是非常好的,而不是操縱字符串,你可以改變方法調用和參數。
Zend_Db_Table類將返回Zend_Db_Table_Select對象(一Zend_Db_Select對象子類)的實例有,如果你調用其選擇方法預先定義的表名 - 這是關於Zend_Db_Select對象和Zend_Db_Table_Select對象之間的唯一區別。
您的考慮的確是使用Zend_Db_Select還是手動編寫SQL。 Zend_Db_Select不是非常靈活,但很容易閱讀,操作和使用。
+1大解釋 – tawfekov 2010-10-29 12:24:16
很好的答案!我懷疑有些「歷史」是在這個重複功能的後面:) – 2010-10-29 16:04:18
我認爲ZF2將提供更清潔的數據庫功能。 Zend_Db_Table不再特別受歡迎,因爲它實現了Active Record,這種模式大多數傾向於Data Mapper。 – 2010-10-29 16:55:23