我正试图通过行的主键访问fetchall调用的行(返回zend_db_table_rowset_abstract)。
我想知道除了循环查找所需的行之外,最简单的方法是什么。
最佳答案
如果我没记错的话,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;
当然,如果需要,可以扩展抽象行集类并在内部执行此操作。