【发布时间】: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