2011-10-17 227 views
4

我想知道爲什麼在Zend_Db中必須使用createRow方法來獲取一個新的空Row對象,而不是直接實例化Row對象。例如,如果我擴展了默認類以創建自己的用戶表和行類,那麼爲了創建新的行對象,我總是必須執行以下操作來創建新的Row對象:Zend_Db_Table_Row:爲什麼我必須使用createRow()?

$userTable = new App_Table_User(); 
$userRow = $userTable->createRow(); 
$userRow->setName('bob'); 
$userRow->save(); 

但對我來說更有意義,能夠只是說:

$userRow = new App_Row_User(); 
$userRow->setName('bob'); 
$userRow->save(); 

我明白,我總是可以建立這個功能合併到延長Zend_Db_Table_Row_Abstract我行類,但我不知道是否有Zend Framewo的一個具體原因rk團隊不僅僅把這個設爲默認值?

回答

4

可以直接用new實例化你的Row類。

但是行對象需要知道哪些列對該行數據有效。

將行的類名映射到其相應的表類名沒有什麼妙處。所以行本身並不知道它屬於哪個表。因此無法猜測如何編寫SQL來執行插入或更新操作;它從相應的Zend_Db_Table對象中獲取這個元數據。你必須告訴行使用哪個表。

如果使用new構造一個行對象,則必須將一個配置數組傳遞給構造函數,包括表類名,或者該表類的對象實例。

$userRow = new App_Row_User(array('table' => 'App_Table_User')); 

或者

$userTable = new App_Table_User(); 
$userRow = new App_Row_User(array('table' => $userTable)); 

如果沒有有效的表對象或類名,實例化與new行對象會拋出異常。

同樣,save()使用表格對象,調用方法insert()update()。如果沒有有效的表格對象,Row的save()方法將拋出異常。

相關問題