我主要使用zend_db_table和paginator,但问题是它返回的是zend_db_rows而不是来自我的数据映射器的域对象。
举个例子:
class Content_Model_ArticleMapper {
/*
* @param Zend_Db_Select $select
* @return Zend_Paginator
*/
public function getPaginator($select = null){}
}
我可以通过在自定义行集中覆盖 _loadAndReturnRow 方法来进行黑客攻击。 然而,这是相当丑陋的,因为当我查询表时,我不再拥有 Zend_Db_Row 了。 并且也失去了像 save 这样的方法,我不想在领域对象上复制它们。
class Content_Model_DbTable_Rowset_Articles extends Zend_Db_Table_Rowset {
protected function _loadAndReturnRow($position)
{
if (!isset($this->_data[$position])) {
require_once 'Zend/Db/Table/Rowset/Exception.php';
throw new Zend_Db_Table_Rowset_Exception("Data for provided position does not exist");
}
// do we already have a row object for this position?
if (empty($this->_rows[$position])) {
$this->_rows[$position] = new Content_Model_Article($this->_data[$position]);
}
// return the row object
return $this->_rows[$position];
}
}
我的问题是如何优雅地实现这个功能? :) 你需要编写自定义的分页适配器吗?