Symfony2的mongoDB返回一个loggablecursor而不是我的实体

时间:2012-03-31 18:43:01

标签: php mongodb symfony

我目前使用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数组?

[edit]在JSON中返回结果的最佳方法是什么?

3 个答案:

答案 0 :(得分:7)

使用方法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);

答案 1 :(得分:3)

findBy returns MongoDB ODM中的游标与教义orm不同。

尝试:

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

答案 2 :(得分:0)

如果您希望在将实体存储为数组时更加灵活,可以执行此操作

$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)
}