ZF2 尝试使用表网关并获取结果集时遇到问题:
我正在尝试查询两个结果集(来自两个不同的表/两个不同的网关)并将它们发送到视图以进行迭代并放置在屏幕上。
(简化示例):
function viewAction() {
$table1 = $this->getServiceLocator()->get('Model\Table\Table1');
$table2 = $this->getServiceLocator()->get('Model\Table\Table2');
return new ViewModel([
'table1' => $table1->fetchAll(),
'table2' => $table2->fetchAll()
]);
}
使用 Model\Table\Table1 和 Model\Table\Table2 获取全部:
public function fetchAll() {
return $this->tableGateway->select();
}
然后在我看来:
...
<?php
foreach($table1 as $row) {
echo "<tr><td>{$row['col1']}</td><td>{$row['col2']}</td></tr>";
}
?>
...
<?php
foreach($table2 as $row) {
echo "<tr><td>{$row['col1']}</td><td>{$row['col2']}</td></tr>";
}
?>
...
问题是, $table1 在循环时将没有数据。但是,如果我改为执行这样的操作(在控制器中,不是将结果集传递给视图,而是将 $results1 和 $results2 传递给视图):
$fetchAll = $table1->fetchAll();
$results1 = [];
foreach($fetchAll as $row) {
$results1[] = $row;
}
$fetchAll = $table2->fetchAll();
$results2 = [];
foreach($fetchAll as $row) {
$results2[] = $row;
}
然后一切正常。我不想两次遍历同一组数据。 那么,为什么 ZF2 会阻止我在访问 ResultSet 中的所有数据之前使用两个不同的 ResultSet?