我正试图通过行的主键访问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;

当然,如果需要,可以扩展抽象行集类并在内部执行此操作。

09-28 08:35