В mongoDB Symfony2 вместо моих объектов возвращается loggablecursor

В настоящее время я использую DoctrineMongoDbBundle для запросов к моей базе данных mongodb.

Вот вызов моего контроллера:

$dm = $this->get('doctrine.odm.mongodb.document_manager'); $entities = $dm->getRepository('MyBundle:Animal')->findBy(array("prop" => "1")); echo print_r($entities->getQuery()); echo printf(count($entities)); echo get_class($entities); 

Затем я попытался сериализовать $ enitities для json и отправить его клиенту, но он не работал.

Отпечаток эха:

 Array ( [prop] => 1 ) 101 Doctrine\ODM\MongoDB\LoggableCursor0 

Это означает, что запрос верен, но счет должен быть «2», а тип должен быть массивом Animal.

Почему репозитория возвращает LoggableCursor0 вместо массива Animal?

[edit] Как он мог вернуть массив Animal?

[edit] Что было бы лучшим способом вернуть мой результат в JSON?

Используйте метод toArray() . Как это:

 $dm = $this->get('doctrine.odm.mongodb.document_manager'); $entities = $dm->getRepository('MyBundle:Animal')->findBy(array("prop" => "1"))->toArray(); 

Если вам нужно получить массив сущностей, используйте array_values() . Как это:

 $entities = array_values($entities); 

findBy возвращает курсор в ODM MongoDB, в отличие от доктрины orm.

Пытаться:

 echo printf($entities->count()); 

Если вы хотите немного больше гибкости при хранении объектов в виде массива, вы можете сделать это

 $dm = $this->get('doctrine.odm.mongodb.document_manager'); $animalLoggableCursors = $dm->getRepository('MyBundle:Animal')->findBy(array("prop" => "1")); $animals = array() while ($animal = $animalLoggableCursors->getNext()) { if ($animal->getSomeProperty() == $someValue) array_push($animals, $animal) }