2013-10-04 53 views
0

对于Doctrine和ZF2来说,我完全陌生,来自C#env。从几天的工作在学说和zf2。并努力学习基本知识,以便在未来几天内构建RESTFull服务API。现在,我试图让该教条获取所有()结果到JSON,但没有这样做。 MYS API客户端(Backbone.js的)工作正常,这是结果,但显示空对象Doctrine2&zf2:fetchAll()结果为JSON,将结果转换为数组,然后转换为ZF2中的json

我的控制器代码是这样

public function getList() { 

     $repository = $this->getEntityManager()->getRepository('Application\Entity\Test'); 

     $posts = $repository->findAll(); 

     echo var_dump((array)$posts); 

     header('Access-Control-Allow-Origin:http://api.server.com'); 

    return new JsonModel($posts); 
    } 

的var_dump结果

array(2) { 
     [0]=> 
     object(Application\Entity\Test)#339 (2) { 
     ["id":"Application\Entity\Test":private]=> 
     int(2) 
     ["name":"Application\Entity\Test":private]=> 
     string(5) "Kumar" 
     } 
     [1]=> 
     object(Application\Entity\Test)#340 (2) { 
     ["id":"Application\Entity\Test":private]=> 
     int(1) 
     ["name":"Application\Entity\Test":private]=> 
     string(8) "Panindra" 
     } 

    } 

和我JSONModel放出来是[{},{}]

我想建立这样的问题的REST服务

回答

5

可以使用Doctrine\ORM\Query对象的QueryBuilder APIgetResult()HYDRATE_ARRAY选项来实现这一目标。例如:

$queryBuilder = $this->getEntityManager()->createQueryBuilder(); 
$queryBuilder->select('t') 
      ->from('Application\Entity\Test', 't'); 

$results = $queryBuilder->getQuery() 
         ->getResult(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY); 

return new JsonModel($results); 
0

代码中的所有内容都是正确的,并且正常工作。 JsonModel是“空的”,因为你的班级成员是私人的。如果您将它们设置为公共,您将获得预期的JsonModel。

+2

您不应该在Doctrine 2实体中使用公共成员,因为延迟加载的东西 –