希望通过从数据库对象获取来返回 Json 格式的数据。Php 交响乐

Want to return data in Json format by getting from database Object. Php Symfony

提问人:Timothy 提问时间:8/18/2022 最后编辑:brombeerTimothy 更新时间:8/20/2022 访问量:817

问:

我正在从数据库模型中获取数据并希望以 json 格式返回,但它返回空数组,但是当我对包含对象数据的变量使用 dump 时,它会返回实际数据。

下面是从对象获取数据的代码

   $user = $this->getUser();
    $bookings = $this->getDoctrine()->getRepository(Trip::class)
                ->findBy(['customer' => $user], ['id' => 'DESC']);

在这里,我以JSON形式返回它

 return new JsonResponse(['bookings' => $bookings]);

它在屏幕上显示该数组为空。

enter image description here

我用DD来检查数据是否传来

  $user = $this->getUser();
    $bookings = $this->getDoctrine()->getRepository(Trip::class)
                ->findBy(['customer' => $user], ['id' => 'DESC']);
     dd($bookings);

它返回

enter image description here

enter image description here

请帮助我解决如何克服这个问题

php json symfony 对象 doctrine-query

评论

0赞 Monnomcjo 8/18/2022
只是 ?return new JsonResponse($bookings);
0赞 Timothy 8/18/2022
它还返回空数组,

答:

0赞 Dylan KAS 8/18/2022 #1

你可以使用 symfony 组件 Serializer

你可以把你的对象数组变成一个数组的数组

use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;

$serializer = new Serializer([new ArrayDenormalizer(), new DateTimeNormalizer(), new ObjectNormalizer(
            null,
            null,
            null,
            new ReflectionExtractor()
        ),],[ new JsonEncoder(),]);
$bookings = $this->getDoctrine()->getRepository(Trip::class)
                ->findBy(['customer' => $this->getUser()], ['id' => 'DESC']);
$array = $serializer->normalize($bookings, 'array');

或者你可以使用 serialize 方法直接获取 json:

 $json= $serializer->serialize($bookings, 'json');

如果您的实体具有循环引用,您可以查看文档来处理它。

一种方法是添加一个关于如何处理对象的回调方法,但最好阅读文档,因为解决方案可能因实体而异。

0赞 Nirina-aj 8/20/2022 #2

Yes 为空json_encode因为支持的数组或对象属性是公共的,您可以在此处看到。 所以你必须解析$bookings。

JsonResponse使用json_encode你可以看到

例:

$array = [];
$arrayBooking = [];

foreach ($bookings as $booking) {
    $arrayBooking['id'] = $booking->getId();
    $arrayBooking['toPlace'] = $booking->getToPlace();
    $array[] = $arrayBooking;
}

return new JsonResponse($array);

或者,您使用序列化程序 symfony 组件,如上所述。