Как десериализовать JSON в сущность с отношениями в Symfony 3.4? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть сущность ServiceLevel в моем приложении Symfony 3.4.

 /**
 * @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",

Я понимаю, почему это происходит, но я не могу найти решение для преобразования целого числа в Entity с использованием сериализатора.Есть ли способ обработки отношений ManyToOne и ManyToMany?Кстати, я не хочу создавать новые сущности, просто ссылки на существующие.

1 Ответ

0 голосов
/ 30 декабря 2018

Я думаю, что вы должны иметь @Groups ({"service_level"}) для вашего PartnershipBundle \ Entity \ ServiceLevel \ FlightService.

пока.

...