gpt4 book ai didi

zend-framework - Zend框架数据映射器+分页器

转载 作者:行者123 更新时间:2023-12-02 04:07:47 31 4
gpt4 key购买 nike

我通常将zend_db_table与分页器一起使用,问题是它将返回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];
}
}

所以我的问题是你如何做到这一点呢? :)您是否编写自定义Paginator适配器?

最佳答案

您可以在DbTable中设置rowClass

DbTable

class Content_Model_DbTable_Article extends Zend_Db_Table_Abstract {

protected $_name = 'article';

public function init() {
$this->setRowClass('Content_Model_Article');
}

}

域模型
class Content_Model_Article extends Zend_Db_Table_Row {

//for example
public function getAuthorFullName() {
return $this->author_firstname . ' ' . $this->author_lastname;
}

}

现在,行集中的行是Content_Model_Article的实例,您可以使用Zend_Paginator_Adapter_Iterator。

使用分页器
$articleTable = new Content_Model_DbTable_Article();
$articleRowset = $articleTable->fetchAll();
$paginator = new Zend_Paginator(Zend_Paginator_Adapter_Iterator($articleRowset));
//now you can loop through the paginator
foreach($paginator as $article) {
echo $article->getAuthorFullName();
}

关于zend-framework - Zend框架数据映射器+分页器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6690032/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com