如何创建一个 Zend_Db_Table 为每一行返回一个不同的类。?
示例 UserTable 具有 id、name 和 type 类型包含类名(admin、client 等...)
admin、client 类都是 user 的子类
如果我调用 fetch 我需要根据数据库中的相应值获取一个管理员或客户端对象。
如何创建一个 Zend_Db_Table 为每一行返回一个不同的类。?
示例 UserTable 具有 id、name 和 type 类型包含类名(admin、client 等...)
admin、client 类都是 user 的子类
如果我调用 fetch 我需要根据数据库中的相应值获取一个管理员或客户端对象。
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
属性创建了一个行类。您可能可以根据数据的行类型设置调用_rowClass
之前的方法。current
您可以在 current 中实例化一个特定的类并根据类型参数返回它。
你有没有想过也许只是使用组合来代替?如果它是管理员类型或其他东西,就说只是将数据传递给一个新类?