MongoDB Symfony2 возвращает loggablecursor вместо моих сущностей - PullRequest
3 голосов
/ 31 марта 2012

В настоящее время я использую 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?

[править] Как он может возвращать массив Animal?

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

Ответы [ 3 ]

7 голосов
/ 31 марта 2012

Использовать метод 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);
3 голосов
/ 31 марта 2012

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

Попробуйте:

echo printf($entities->count());
0 голосов
/ 03 сентября 2012

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

$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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...