一个Symfony2新手问题。
我在以下代码中遗漏了什么(它返回"在非对象上调用成员函数getArrayResult())"
/**
* Lists all Post entities.
*
* @Route("/jsonout", name="Mario_Post_jsonout")
* @Method("GET")
* @Template()
*/
public function jsonoutAction()
{
$response = new Response();
$em = $this->getDoctrine()->getEntityManager();
$query = $this->getDoctrine()
->getRepository('MarioBlogBundle:Post')
->createQueryBuilder('e')
->select('e')
->getQuery();
$results = $query->execute();
$myArray = $results->getResult(Query::HYDRATE_ARRAY); // neither ->getArrayResult();
$response->setContent(json_encode($myArray));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
我是否需要使用'使用Doctrine \ ORM .....;'线?究竟是哪一个? 谢谢
答案 0 :(得分:2)
根据我的经验,方法getResult()
和getArrayResult()
附带$query
对象而不是$result
对象。因此,我们不希望同时使用->execute()
和getResult()
。这是代码中的错误。我们可以重写你的代码,
public function jsonoutAction()
{
$response = new Response();
$em = $this->getDoctrine()->getEntityManager();
$query = $this->getDoctrine()
->getRepository('MarioBlogBundle:Post')
->createQueryBuilder('e')
->select('e')
->getQuery();
$results = $query->getArrayResult(); //or getResult(Doctrine\ORM\Query::HYDRATE_ARRAY);
$response->setContent(json_encode($results));
$response->headers->set('Content-Type', 'application/json');
return $response;
}
它会起作用。
答案 1 :(得分:0)
两个建议:
1)你可以说,你不需要execute
查询
$query->getResult()
将返回对象数组。如果你
希望将结果作为可以使用的纯数组
$query->getArrayResult()
将返回找到的值数组。
如果要全部选择,也不需要使用select('e')
列。
2)如果您想获得没有任何条件和条件的所有记录,您可以使用findAll();
返回实体中所有对象的数组:
$em = $this->getDoctrine()->getEntityManager();
$results = $em->getRepository('MarioBlogBundle:Post')->findAll();
现在通过安装和使用这个类EntitySerializer,你可以拥有数组输出或只有JSON输出(你想要的)。对于你的例子,它将是:
$entitySerializer = new Bgy\Doctrine\EntitySerializer($em);
$jsonOutput = $entitySerializer->toJson($results);