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