现在用这个打砖墙。我有一个查询,有一些连接,所以运行它(TableGateway将不会使用其他表中的字段):
$sql = new Sql($adapter);
$select = getMySelect();
echo $select->getSqlString($this->adapter->getPlatform());
//ok - this, if I run it on the database MYSELF, yields 2 of rows with the current data. Correct.
$statement = $this->adapter->query($select->getSqlString($this->adapter->getPlatform()));
$res = $statement->execute();
$resultSet = new ResultSet;
$resultSet->initialize($res);
echo $resultSet->count(); // yields 2. Correct, but wait...
foreach($resultSet as $row)
{
//do stuff with $row .... but only happens once! wtf.
}
print_r($resultSet->toArray()); //only one array element, with nested row data - wtf.
所以,简而言之。 sql,通过MySQL手动运行,提供两行(或者更多,如果我将数据添加到数据库中)。 Zend \ Db \ ResultSet 本身报告它有两行。但是它不会让它们成为一个foreach循环。
我不明白。我错过了一些ZendFrameworky2魔术舞吗?在回到可信赖的平原之前再给它一次机会。 PDO。
答案 0 :(得分:2)
我将问题跟踪到tablegateway以及Zend用于检查是否存在有效结果集的示例代码。
$row = $resultSet->current();
if (!$row) {
throw new Exception("no row found");
}
return $resultSet;
已经通过获取当前行将结果集中的指针移动到索引1,然后该行成为foreach的起始点。
要修复,请更改为
$row = $resultSet->count();
if (!$row) {
throw new Exception("no row found");
}
return $resultSet;