缺少ZF2 SQL语句和ResultSet中的行

时间:2015-02-16 16:39:42

标签: database zend-framework2

现在用这个打砖墙。我有一个查询,有一些连接,所以运行它(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。

1 个答案:

答案 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;