【问题标题】:Return data from Doctrine inside a JsonResponse object从 JsonResponse 对象内的 Doctrine 返回数据
【发布时间】:2018-09-18 23:17:33
【问题描述】:

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

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

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

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

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

有谁知道我怎样才能以这种方式正确返回数据?

【问题讨论】:

    标签: php symfony serialization doctrine-orm doctrine


    【解决方案1】:

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

    但是,当您将 Users 数组放入 JsonResponse 时,这些对象将被序列化,并且(我猜)User 类中的属性是 private,每个对象的序列化一个只是一个空数组[]...

    您需要将纯数据数组传递给JsonResponse,而不是Users 数组,您有以下几种选择:

    1. 使用$qb->getQuery()->getArrayResult() 直接获取普通数组而不是User 对象数组。
    2. 使User 类实现JsonSerializable 接口,因此您可以定义对象应如何序列化。
    3. 推荐)使用JMS Serializer 等专门的序列化库(或手动,如果您愿意)从您的User 对象生成一个普通数组,然后将该数据放入JsonResponse .

    【讨论】:

    • 谢谢,我尝试使用方法“getArrayResult()”,但由于它是一个复合对象(用户内部还有其他对象),它只返回来自用户对象的东西,而不是来自其他对象。
    • 我也尝试了可序列化接口,它运行良好。但由于它们是复合对象,我必须实现所有对象的接口。但现在我知道为什么我在 JSON 响应中经历了整个“不返回任何内容”。谢谢。
    • 我建议你看看像JMS Serializer这样的序列化库jmsyst.com/libs/serializer
    • 我在我的项目中使用 JMSSerializier。我试过了,但是当我这样做时 $this->serializer->serialize($qb->getQuery()->getResult(), 'json');答案不好,它在我的 JSON 中添加了一个“/”,表示不好。
    【解决方案2】:

    嘿,在这种情况下,如果可以的话,请使用 getArrayResult 而不是 getResult

    【讨论】:

    • 谢谢,但我尝试使用方法“getArrayResult()”,但由于它是一个复合对象(用户内部有其他对象),它只返回来自用户对象的东西,而不是来自其他对象。
    猜你喜欢
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 2019-01-07
    • 2013-05-10
    相关资源
    最近更新 更多