我正在尝试按行的主键访问fetchAll调用的行(返回Zend_Db_Table_Rowset_Abstract)。
我想知道最简单的方法是做什么,除了循环并找到所需的行。
答案 0 :(得分:1)
如果我没记错的话,Zend_Db_Table_Rowset_Abstract
只是传递一个数组(或类似于一个的数组),然后当你遍历它时,它会创建Zend_Db_Table_Row_Abstract
个对象。
最好的方法可能是循环一次,并将行存储在由主键索引的数组中。这样你就可以做一个循环,然后可以通过密钥访问任何一行。
更新:刚看了一下源,这里的数据(最终)传递给了行集对象:
$stmt = $this->_db->query($select);
$data = $stmt->fetchAll(Zend_Db::FETCH_ASSOC);
return $data;
第一次遍历行集时,该原始数组用于创建行对象。在此之前数据尚未完成,因此您没有做过已经完成的事情。
所以你必须做这样的事情来将行映射到主键(我暂时没有使用Zend_Db_*
,将其视为伪代码):
$rows = array();
foreach($rowset as $row){
//you could pull the primary key from Zend_Db_Table
$rows[$row->id] = $row;
}
//now you can lookup by primary key
$rows[55]->name;
当然,您可以扩展抽象行集类,并在内部执行此操作。
答案 1 :(得分:1)
使用'$ db-> find($ id) - > current();'
希望它有所帮助。