私のmongodbデータベースに対してクエリを実行しています...そして、フロントエンドロジックの2つの別々の場所で、結果を繰り返して別の情報を抽出/表示する必要があります。mongodbカーソルを2回反復しようとしています - 失敗しました
問題
私は反復処理しようとする第二の時間、私は、次のエラーメッセージが出ます:
Fatal error: Uncaught MongoDB\Driver\Exception\LogicException: Cursors cannot yield multiple iterators in /var/www/localhost/htdocs/widgets/exception_details.php:46 Stack trace: #0
バックエンドのコード
をここでデータベースを照会するためのロジックです私のモデル:
try{
$id = new \MongoDB\BSON\ObjectId($docid);
$filter = ['_id' => $id];
$options = [];
$query = new \MongoDB\Driver\Query($filter, $options);
$rows = $m->executeQuery('widgets.play_summary', $query);
return $rows;
} catch (Exception $e) {
echo 'Exception:'. $e->getMessage();
return false;
}
フロントエンドロジック
ここでは、反復を試みるロジックがあります。
初回:その後、
foreach ($rows as $id=>$value) {
if (count($value->unreachable_servers > 0)) {
foreach($value->unreachable_servers as $key=>$value) {
echo "<tr>";
echo "<td>$value</td>";
echo "</tr>";
}
}
}
以降、私はこれをしようと、次の行をコメントアウト
$it = new IteratorIterator($rows); //line 46
$it->rewind();
foreach ($rows as $id=>$value) {
if (count($value->failed_plays > 0)) {
foreach($value->failed_plays as $key=>$value) {
echo "<tr>";
echo "<td>$value</td>";
echo "</tr>";
}
}
}
追加情報
だけで正確に同じエラーを与えるが、ライン46の代わりにライン48に:
$it = new IteratorIterator($rows);
$it->rewind();
ヒントをいただければ幸いです。
ありがとうございました。試験として
EDIT 1
、Iは、巻き戻しを使用するフロントエンド・コードを変更し、次のような:
$it = new \IteratorIterator($rows);
$it->rewind();
//foreach ($rows as $id=>$value) {
while($value = $it->current()) {
if (count($value->unreachable_servers > 0)) {
foreach($value->unreachable_servers as $key=>$value) {
echo "<tr>";
echo "<td>$value</td>";
echo "</tr>";
}
}
$it->next();
}
そして第二のループのために:
$it = new IteratorIterator($rows);
$it->rewind();
//foreach ($rows as $id=>$value) {
while($value = $it->current()) {
if (count($value->failed_plays > 0)) {
foreach($value->failed_plays as $key=>$value) {
echo "<tr>";
echo "<td>$value</td>";
echo "</tr>";
}
}
$it->next();
}
私は同じ結果を得る。それは最初に動作しますが、同じエラーメッセージで2回目に爆撃します。
なぜそれらが巻き戻しの方法を提供しますか?私はあなたの答えを今すぐ試しています...しかし、ちょうど私が尋ねると思った。 – dot
** ** **?イテレータでカーソルをラップしようとしているのはあなたです。 –
ええと...ドキュメントを見れば、巻き戻しメソッドが明示的に参照されます。 http://php.net/manual/en/class.mongodb-driver-cursor.php – dot