【问题标题】:How to deserialize json to entity with relationship in Symfony 3.4?如何在 Symfony 3.4 中将 json 反序列化为具有关系的实体?
【发布时间】:2018-12-27 08:33:16
【问题描述】:

我的 Symfony 3.4 应用程序中有一个实体 ServiceLevel。

 /**
 * @ORM\Table()
 * @ORM\Entity()
 */
 class ServiceLevel
 {
...

/**
 * @var FlightService
 *
 * @ORM\ManyToOne(targetEntity="PartnershipBundle\Entity\ServiceLevel\FlightService")
 * @ORM\JoinColumn(referencedColumnName="id", nullable=false)
 *
 * @Assert\NotBlank()
 *
 * @Groups({"service_level", "service_level_create"})
 */
protected $flightService;

/**
 * @var HotelService|null
 *
 * @ORM\ManyToOne(targetEntity="PartnershipBundle\Entity\ServiceLevel\HotelService")
 * @ORM\JoinColumn(referencedColumnName="id", nullable=false)
 *
 * @Assert\NotBlank()
 *
 * @Groups({"service_level", "service_level_create"})
 */
protected $hotelService;

/**
 * @var \Doctrine\Common\Collections\Collection|ExtraService[]
 *
 * @ORM\ManyToMany(targetEntity="PartnershipBundle\Entity\ServiceLevel\ExtraService", cascade={"persist"})
 * @ORM\JoinTable(name="service_level_extra_service")
 *
 * @Groups({"service_level", "service_level_create"})
 */
protected $extraService;

另外,我使用发布请求来创建新的 ServiceLevel { "name_en": "string", "name_fr": "string", "description_en": "string", "description_fr": "string", "flight_chargeable": true, "hotel_chargeable": true, "flight_service": 1, "hotel_service": 1, "extra_service": [1,2,3] }

另外,我有使用序列化器的控制器操作

$serializer = $this->get('serializer');
$validator = $this->get('validator');
$em = $this->getDoctrine()->getManager();
$data = $request->request->all();
$serviceLevel = new ServiceLevel();

$serializer->denormalize($data, ServiceLevel::class, 'array', [
   'object_to_populate' => $serviceLevel,
]);

我得到的错误是"message": "Expected argument of type \"PartnershipBundle\\Entity\\ServiceLevel\\FlightService or null\", \"integer\" given",

我明白为什么会发生这种情况,但我找不到使用序列化程序将整数转换为实体的解决方案。 有没有办法处理多对一和多对多关系?顺便说一句,我不想​​创建新实体,只需链接到现有实体。

【问题讨论】:

    标签: php symfony-3.4 serialization


    【解决方案1】:

    我认为您的 PartnershipBundle\Entity\ServiceLevel\FlightService 必须有 @Groups({"service_level"})。

    再见。

    【讨论】:

      猜你喜欢
      • 2021-09-27
      • 1970-01-01
      • 2014-05-27
      • 2021-09-21
      • 1970-01-01
      • 2016-10-11
      • 2018-09-19
      • 2018-07-12
      • 1970-01-01
      相关资源
      最近更新 更多