Zendframework Rowset按键选择

时间:2011-10-16 03:53:55

标签: php database zend-framework zend-db

我正在尝试按行的主键访问fetchAll调用的行(返回Zend_Db_Table_Rowset_Abstract)。

我想知道最简单的方法是做什么,除了循环并找到所需的行。

2 个答案:

答案 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();'

希望它有所帮助。