2010-10-29 18 views

回答

11

由於歷史原因,在生成查詢時有幾種不同的選項。

在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不是非常靈活,但很容易閱讀,操作和使用。

+0

+1大解釋 – tawfekov 2010-10-29 12:24:16

+0

很好的答案!我懷疑有些「歷史」是在這個重複功能的後面:) – 2010-10-29 16:04:18

+0

我認爲ZF2將提供更清潔的數據庫功能。 Zend_Db_Table不再特別受歡迎,因爲它實現了Active Record,這種模式大多數傾向於Data Mapper。 – 2010-10-29 16:55:23