2010-06-03 49 views
2

如何創建一個Zend_Db_Table,它返回每行不同的類。行特定類

例 用戶表都有編號,名稱和類型 類型包含的類名(管理員,客戶端等)

的類管理,客戶端是用戶

所有子類。如果我把取我需要獲取管理員或客戶端對象,具體取決於數據庫中的相應值。

+0

我覺得這個問題很有趣,但我仍然想知道是什麼使得它有必要。看來模型應該抽象它,所以你不需要這樣做。 – Sonny 2010-06-03 17:42:45

回答

0
class Your_Db_Table_Row extends Zend_Db_Table_Row_Abstract 
{ 
} 

class Your_Db_Table extends Zend_Db_Table_Abstract 
{ 
    protected $_rowClass = "Your_Db_Table_Row"; 
} 

new Your_Db_Table(array("rowClass" => "Your_Db_Table_Row"); 

所以每當你從你的表子得到行集,行列入這將是你的自定義類。

編輯

要獲得基於值的自定義行,我會說延長Zend_Db_Table_Rowset_Abstract類,而不是和重寫此方法:

getRow(int $position, [bool $seek = false]) 

您還需要覆蓋current方法以及其他一些SeekableIterator實現,它們實際上基於_rowClass屬性創建了一個行類。根據數據的行類型調用current之前,您可以設置_rowClass

你可以在當前實例化一個特定的類並根據類型參數返回它。

你有沒有關於也許只是使用組合而已?如果只是傳遞數據給一個新的類,如果它是一個管理類型或什麼的?

+0

這將爲每行使用'Your_Db_Table_row'類,它需要根據'type'字段值有所不同。 – stimpie 2010-06-03 14:48:36

+0

非常真實;我很快就讀到了這個問題。編輯一個建議。 – typeoneerror 2010-06-03 16:10:02