Преглед изворни кода

Merge branch 'mongocursor-key'

Merges #40.

* mongocursor-key:
  Fix: MongoCursor uses _id as key if present
Andreas Braun пре 10 година
родитељ
комит
c56abb5577

+ 1 - 1
lib/Alcaeus/MongoDbAdapter/AbstractCursor.php

@@ -277,7 +277,7 @@ abstract class AbstractCursor
      * @param \Traversable $traversable
      * @return \Generator
      */
-    private function wrapTraversable(\Traversable $traversable)
+    protected function wrapTraversable(\Traversable $traversable)
     {
         foreach ($traversable as $key => $value) {
             yield $key => $value;

+ 14 - 0
lib/Mongo/MongoCursor.php

@@ -427,6 +427,20 @@ class MongoCursor extends AbstractCursor implements Iterator
     }
 
     /**
+     * @param \Traversable $traversable
+     * @return \Generator
+     */
+    protected function wrapTraversable(\Traversable $traversable)
+    {
+        foreach ($traversable as $key => $value) {
+            if (isset($value->_id) && ($value->_id instanceof \MongoDB\BSON\ObjectID || !is_object($value->_id))) {
+                $key = (string) $value->_id;
+            }
+            yield $key => $value;
+        }
+    }
+
+    /**
      * @return array
      */
     protected function getCursorInfo()

+ 7 - 1
tests/Alcaeus/MongoDbAdapter/MongoCommandCursorTest.php

@@ -35,7 +35,7 @@ class MongoCommandCursorTest extends TestCase
         $this->assertEquals($expected, $cursor->info());
 
         // Ensure cursor started iterating
-        iterator_to_array($cursor);
+        $array = iterator_to_array($cursor);
 
         $expected['started_iterating'] = true;
         $expected += [
@@ -49,5 +49,11 @@ class MongoCommandCursorTest extends TestCase
         ];
 
         $this->assertEquals($expected, $cursor->info());
+
+        $i = 0;
+        foreach ($array as $key => $value) {
+            $this->assertEquals($i, $key);
+            $i++;
+        }
     }
 }

+ 2 - 1
tests/Alcaeus/MongoDbAdapter/MongoCursorTest.php

@@ -19,9 +19,10 @@ class MongoCursorTest extends TestCase
         $this->assertCount(2, $cursor);
 
         $iterated = 0;
-        foreach ($cursor as $item) {
+        foreach ($cursor as $key => $item) {
             $iterated++;
             $this->assertInstanceOf('MongoId', $item['_id']);
+            $this->assertEquals($key, (string) $item['_id']);
             $this->assertSame('bar', $item['foo']);
         }