从JsonResponse对象中的Doctrine返回数据

时间:2018-04-09 14:06:52

标签: php symfony serialization doctrine-orm doctrine

我的问题是我想要从JsonResponse对象中的Doctrine返回一些数据。我使用QueryBuilder获取数据,如下所示:

$qb = $this->getDoctrine()->getRepository(User::class)->createQueryBuilder('u');
$data = $qb->getQuery()->getResult();

$JSONResponse = new JsonResponse();
$JSONResponse->setData($data);

但是,JsonResponse内的数据看起来是空的:

data: {
    [],
    [],
    [],
    [],
    .....
}

有谁知道如何正确地以这种方式返回数据?

2 个答案:

答案 0 :(得分:3)

我认为您正在使用Doctrine从数据库中正确获取User数组(您可以在获取后使用简单的var_dump($data)检查它。

但是,当你将User数组放入JsonResponse时,这些对象将被序列化,并且因为(我猜)User类中的属性是{{ 1}},每个序列化只是一个空数组private ...

您需要将一个简单的数据数组传递给[]而不是JsonResponse的数组,您可以选择以下几个选项:

  1. 使用$qb->getQuery()->getArrayResult()直接获取普通数组而不是User个数组。
  2. 创建User类实现JsonSerializable接口,以便定义对象的序列化方式。
  3. 推荐)使用JMS Serializer之类的专用序列化库(或者如果您愿意,手动生成)从User对象生成普通数组,然后将数据放入User

答案 1 :(得分:1)

Hy,在这种情况下,如果可以

,请使用getArrayResult而不是getResult