我正在尝试通过行的主键访问 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;
当然,如果需要,您可以扩展抽象行集类并在内部执行此操作。
关于php - Zendframework Rowset 按键选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7782238/