テーブル ゲートウェイを使用して結果セットを取得しようとしている ZF2 に問題があります。
(2 つの異なるテーブル/2 つの異なるゲートウェイから) 2 つの結果セットをクエリし、それらをビューに送信して反復処理し、画面に配置しようとしています。
(簡略化した例):
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;
}
その後、すべて正常に動作します。同じデータ セットを 2 回ループする必要はありません。 では、ZF2 では、ResultSet 内のすべてのデータにアクセスする前に 2 つの異なる ResultSet を使用できないのはなぜでしょうか?